0

我有一个使用 ppapi_simple 的 NaCl C 程序。我需要调用异步 PPAPI 函数,例如PPB_NetworkMonitor::UpdateNetworkList()

当我尝试天真地实现它时,我传递给 UpdateNetworkList() 的回调从未被调用过。查看 ppapi_simple 源代码,我注意到 ppapi_simple 从未在其内部消息循环中调用PPB_MessageLoop::Run() ,这可能解释了为什么我的回调从未被调用。

在 ppapi_simple 程序中使用异步 PPAPI 函数的正确方法是什么?我应该创建自己的线程和消息循环吗?

编辑:根据 MessageLoop 的文档,它只需要在线程上进行 PPAPI 调用。所以我尝试使用 CallOnMainThread() 在主线程上调用 UpdateNetworkList() 并且它确实有效 - 我的回调被调用。虽然不确定这是最好的解决方案。

4

1 回答 1

1

ppapi_simple从主线程运行所有内容,并假设用户正在使用阻塞 PPAPI 调用。这使得移植代码更简单。在需要回调的情况下,您已经找到了两种解决方案:

  1. 在主线程上调用函数(运行隐式消息循环)
  2. 启动一个新线程,运行一个消息循环,并将工作发布到该消息循环以调用您的函数。

只要你没有在回调中做很多工作,我会说在主线程上调用更简单。在主线程上做太多工作的担忧是它会使您的页面无响应。

于 2014-10-30T17:58:11.247 回答