2014-10-28 4 views
0

У меня есть программа NaCl C с использованием ppapi_simple. Мне нужно вызвать асинхронные функции PPAPI, такие как PPB_NetworkMonitor::UpdateNetworkList().Вызов асинхронных функций PPAPI из программы ppapi_simple

Когда я попытался реализовать его наивно, обратный вызов, который я передал в UpdateNetworkList(), никогда не вызывался. Глядя на исходный код ppapi_simple, я заметил, что ppapi_simple никогда не вызывает PPB_MessageLoop::Run() в своем внутреннем контуре сообщений, что, вероятно, объясняет, почему мой callback никогда не вызывается.

Каков правильный способ использования асинхронных функций PPAPI в программе ppapi_simple? Должен ли я создать свой собственный поток и цикл сообщений?

EDIT: Согласно документации MessageLoop, это необходимо только для создания вызовов PPAPI в потоке. Поэтому я попытался вызвать UpdateNetworkList() в основном потоке, используя CallOnMainThread(), и он работает - мой callback вызывается. Не уверен, что это лучшее решение.

+0

Укажите, пожалуйста, код, где вы были в состоянии заставить это работать? Простая нить не работает, и фабрика обратного вызова не работает ни –

ответ

1

ppapi_simple запускает все от основного потока и предполагает, что пользователь использует блокирующие вызовы PPAPI. Это упрощает перенос кода. В случае, когда вам нужно обратные вызовы, вы уже нашли два решения:

  1. Вызов функции в главном потоке (который работает неявный цикл обработки сообщений)
  2. Начать новую тему, запустить цикл обработки сообщений , и выполните работу в этом цикле сообщений, чтобы вызвать вашу функцию.

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

+0

Пожалуйста, поделитесь кодом, в котором вы могли заставить его работать? Простая нить не работает, и фабрика callback не работает ни –

 Смежные вопросы

  • Нет связанных вопросов^_^