Дождитесь длительной работы без зависания браузера в плагине NPAPI без окон

Я написал плагин NPAPI без окон, и я собираюсь выполнить некоторую длительную операцию (например, отправить HTTP-запрос на публикацию с данными изображения) в функции плагина, вызываемой JavaScript веб-браузера. Веб-браузер должен дождаться, пока рабочий поток плагина завершит свою работу, прежде чем делать что-либо еще.

Чтобы предотвратить зависание веб-браузера, я создаю рабочий поток для длительной операции в моей функции плагина.

У меня вопрос в том, как правильно дождаться завершения потока в функции плагина и без зависания браузера при этом?

Насколько мне известно, следующий код работает только в оконных приложениях.

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

Любая помощь будет очень признательна.


person winhow    schedule 15.11.2013    source источник


Ответы (1)


Чтобы не повесить браузер, вам действительно следует немедленно вернуться из функции плагина и неблокирующе выполнять работу в фоновом потоке. Когда он будет завершен, вы можете вызвать обратный вызов, чтобы уведомить JavaScript содержимого.

Любое обходное решение, такое как вращение циклов сообщений, - это всего лишь обходной путь, и не гарантируется, что он будет работать в разных версиях браузера. Единственное правильное решение - выполнять работу без блокировки.
Вы всегда должны иметь возможность решать свои проблемы, не блокируя весь браузер, например, не обрабатывать дальнейшие действия на своей веб-странице в ожидании завершения операции.

person Georg Fritzsche    schedule 15.11.2013
comment
Ага; блокировка основного потока - большой запрет на использование плагинов - person taxilian; 16.11.2013