2013-06-19

JavaScript Event Queue & Ruby Thread must use Thread Queue to share attr

單純最近發覺新開發的EventMachine有漏封包的關係,還害我去debug JavaScript的部分…

不過因為這樣,我寫了一個JavaScript Event Queue的function,以後說不定用得到才是

//JavaScript Event Queue
//define
var fQueue = (function(){
  var queue = {};
  return{
    add:function(n,f){
      queue[n]?queue[n].push(f):queue[n]=[f];
    },
    goNext:function(n){
      n=queue[n].shift();n&&n();
    }
  };
}());

//use
fQueue.add('q_name' , function(){
  //your code here
  fQueue.goNext('q_name');
});
fQueue.goNext('q_name');

正題,簡單的來說這篇很容易解決,因為Thread share本身通常實作為Array,然後把Array換成Thread的Queue即可,類似原本的

#ruby code#

$queue = []
#fix to
$queue = Queue.new

其他大概都相同,不過如果你有發現queue本身沒有動作或是.pop()不出東西的話,你可以嘗試使用.pop(true) << 不過這點要小心就是了,因為如果為empty一定會噴Error

解決的話…我不愛用rescue,所以多一次判定即可,類似

#ruby code#

unless $queue.empty?
  while temp = $queue.pop(true)
    #your code here
    break if $queue.empty?
  end
end

yoo00o打完收工 :)

沒有留言:

張貼留言