2013-11-15 58 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