nsIThreadManager

たぶんいままでの書き方が間違ってた。
nsIThreadのインターフェイスが変わってた。frozenじゃなかったのか。


Interface Reference - nsIThread
nsIThread - MDC

pthreadに似てたスレッド作ってinitしてrunっていうインターフェイスから、スレッドつくってそれのproxyを作ってrunを呼ぶというややこしいやり方に。

sunbird/js/calWcapUtils.js - Google Code Search

    get proxy() {
        if (!this.m_proxy) {
            var eventTarget = null;
            try {
                var eventQueueService =
                    Components.classes["@mozilla.org/event-queue-service;1"]
                    .getService(Components.interfaces.nsIEventQueueService);
                eventTarget = eventQueueService.createThreadEventQueue(
                    Components.classes["@mozilla.org/thread;1"]
                    .createInstance(Components.interfaces.nsIThread), true);
            }
            catch (exc) { // eventQueue has vanished on trunk:
                var threadManager =
                    Components.classes["@mozilla.org/thread-manager;1"]
                    .getService(Components.interfaces.nsIThreadManager);
                eventTarget = threadManager.newThread(0);
            }
            var proxyMgr = Components.classes["@mozilla.org/xpcomproxy;1"]
                .getService(Components.interfaces.nsIProxyObjectManager);
            this.m_proxy = proxyMgr.getProxyForObject(
                eventTarget, Components.interfaces.nsIRunnable, this,
                Components.interfaces.nsIProxyObjectManager.INVOKE_ASYNC );
        }
        return this.m_proxy;

Threading in Gecko 1.9 — Richard Crowley’s blog
に今までなかんじで呼ぶ方法が書かれているのを発見。どうかな。

flickrのひとらしい。Windowsflickr uploadrがxulrunnerでできてたけどこの人が作ったとかか。このbanzaiっていうthemeいいな。