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

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

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

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

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

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

Любая помощь будет по достоинству оценена.

1 ответ

Решение

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

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

Другие вопросы по тегам