Hatena::ブログ(Diary)

サバニFRP

2009-02-24

[][]JavaScript で sleep (nsIThread 版)

chaika のスレッド表示の負荷をおさえる実験で使っている方法で、元ソースは Mozmill

副作用がありそうでまだ試験中だけど、Piro さんが JavaScriptでsleepしたい、を実現する方法(require JavaScript 1.7) で似たようなことをしていたのでメモとして紹介。

function sleep(aWait) {
  var timer = { timeup: false };

  var interval = window.setInterval(function(){
    timer.timeup = true;
  }, aWait);

  var thread = Cc["@mozilla.org/thread-manager;1"].getService().mainThread;
  while(!timer.timeup){
    thread.processNextEvent(true);
  }
  window.clearInterval(interval);
}

使い方

  dump("1\n");
  sleep(1000); // 1000ミリ秒待つ
  dump("2\n");  

piro_orpiro_or 2009/03/09 03:54 おおっ…、と思って試してみたらこの機能はGecko 1.9以降限定なんですね。
Thunderbird 2用に使いたい場面があったので、ちょっと残念……

flsfls 2009/03/11 00:51 残念ながら 1.9 以降用ですね。
1.8 でも nsIEventQueue でがんばればできるかもしれませんが…