2011-05-18 33 views
1

我正在开发一个使用PyXPCOM运行进程的Firefox扩展。我希望在过程开始时显示一个进度表并向用户提供反馈。Progress Meter和XPCOM

在JavaScript我呼吁线程管理器在Python运行过程:

var threadManager = Components.classes["@mozilla.org/thread-manager;1"].getService(); 
var background = threadManager.newThread(0); 
background.dispatch(obj, background.DISPATCH_NORMAL); 

所以我不知道是否有检查的时候线程开始它的工作,当它完成的方式。这有助于我在JavaScript中控制我的进度表!

如果任何人有在执行进度表更好的想法,请让我知道:)

感谢

回答

1

你不应该直接从JavaScript创建新主题 - 这有很多的线程安全问题和从我所知道的这个功能在Firefox 4中不再可用。替换是铬工作者:https://developer.mozilla.org/en/DOM/ChromeWorker。所以,你会创造你的工人是这样的:

var worker = new ChromeWorker("script.js"); 
worker.postMessage(obj); 

你也想从工作人员接收消息(例如进度通知)。

worker.onmessage = function(event) 
{ 
    if (event.data.type == "progress") 
     alert("Worker progress: " + event.data.value); 
    else if (event.data.type == "done") 
     alert("Worker done!"); 
} 

工人本身就需要发送您通过当然postMessage功能进度通知,例如:

postMessage({type: "progress", value: done/total*100}); 
+0

警报不工作(因为它不是线程安全的)。除了throw-ing和console.log之外,还有其他输出方式吗? – user654628 2011-07-02 22:16:08

+0

@ user654628:这是在主线程上运行的代码 - 所以'alert'确实有效。无论如何,这仅仅是一个例子,完全不像你真正使用的代码。 – 2011-07-02 22:35:10