在NPAPI无窗口插件中没有浏览器挂起等待冗长的操作

时间:2013-11-15 04:32:53

标签: multithreading npapi browser-plugin windowless

我已经编写了一个无窗口的NPAPI插件,我将在一个由Web浏览器JavaScript调用的插件函数中执行一些持久的操作(例如,发送带有图像数据的http post请求)。在执行任何其他操作之前,Web浏览器必须等待插件的工作线程完成其工作。

为防止Web浏览器挂起,我在插件函数中为长时间操作创建了一个工作线程。

我的问题是如何正确等待线程在插件函数中完成,并且没有浏览器同时挂起?

据我所知,以下代码似乎仅适用于窗口模式应用程序。

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

任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:1)

为了不挂起浏览器,你真的应该立即从你的插件函数返回并且非阻塞地在后台线程中完成工作。完成后,您可以调用回调来通知内容JavaScript。

像旋转消息循环这样的每个解决方法就是 - 一种解决方法 - 并且不能保证在浏览器版本之间工作。唯一合适的解决方案是非阻塞地完成工作 您应始终能够在不阻止整个浏览器的情况下处理您的问题,例如在等待完成操作时不在网页上处理任何进一步的操作。