2011-05-18 59 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