Как перезвонить тему плагина на Safari 5.1 на OSX? - PullRequest
0 голосов
/ 28 октября 2011

Функции Gecko NPN_PluginThreadAsyncCall / pluginthreadasynccall не работают для меня в Safari 5.1 (Firefox работает) - моя функция не вызывается.Я пытаюсь вызвать функцию обратно в JavaScript после выполнения длительной задачи в другом потоке.Как я могу сделать эту работу?

1 Ответ

1 голос
/ 28 октября 2011

Да, у нас была такая же проблема с Safari 5.1 в FireBreath (на которую вы обязательно должны обратить внимание, если вы не знакомы с ней);NPN_PluginThreadAsyncCall больше не работает.Вы не указали, на какой платформе вы работаете, поэтому я покажу вам, что мы используем как на Mac, так и на Windows.

В Windows мы создаем сообщение HWND и отправляем сообщение на этот HWND, передаваяпустота * в данных события как LPARAM;void * преобразуется обратно в указатель на структуру данных, содержащую те параметры, которые обычно принимает pluginthreadasynccall, выполняется вызов и структура данных освобождается.Класс окна сообщения , который мы используем, находится здесь , а здесь, где осуществляется вызов .(Обратите внимание, что мы используем тот же механизм для вызовов между потоками в IE)

На Mac мы в основном просто используем target-c executeSelectorOnMainThread;мы обернули его в класс, чтобы его было легче использовать из c ++.Класс планировщика , который мы используем, находится здесь , а здесь, где выполняется вызов .Обратите внимание, что вам нужно быть очень осторожным, потому что с ними существует множество возможных условий гонки, и иногда вы в конечном итоге получаете повторно вводимый код.У FireBreath есть десятки часов работы, отводимой на совершенствование многопоточных вызовов;это обманчиво хитрая проблема.

Надеюсь, это поможет!

...