2013-11-15 59 views
0

我已經寫了一個無窗口的NPAPI插件,並且我將執行一些持久的操作(例如發送一個http post請求與圖像數據)在一個插件函數調用網頁瀏覽器JavaScript。在做其他事情之前,Web瀏覽器必須等待插件的工作線程完成其工作。等待漫長的操作沒有瀏覽器掛在NPAPI無窗口插件

爲了防止Web瀏覽器掛起,我在插件函數中爲漫長的操作創建了一個工作線程。

我的問題是,如何正確地等待線程在插件函數中完成,並且沒有瀏覽器同時掛起?

據我所知,下面的代碼似乎只適用於窗口模式的應用程序。

// on Main thread 
    while (WaitForSingleObject(hWorkerThread, 100) == TIMEOUT) 
    { 
     while (PeekMessage(...)) 
     { 
      TranslateMessage(...); 
      DispatchMessage(...); 
     } 
    } 

任何幫助將非常感激。

回答

1

爲了不掛斷瀏覽器,你應該立即從你的插件函數返回並且在後臺線程中不阻塞地執行這個工作。完成後,您可以調用回調來通知內容JavaScript。

像旋轉消息循環的每個解決方法就是 - 解決方法 - 並不保證能夠跨瀏覽器版本工作。唯一適當的解決方案是非阻塞地完成工作。
您應該始終能夠處理您的問題,而不會阻止整個瀏覽器,例如在等待完成操作時不在您的網頁上處理任何進一步的操作。

+0

是的;在主線上阻塞是插件領域的一大禁忌 – taxilian