0

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

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

我的问题是如何在插件功能中正确地等待线程完成,并且同时不挂起浏览器?

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

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

任何帮助将不胜感激。

4

1 回答 1

1

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

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

于 2013-11-15T20:34:09.327 回答