在javascript中,我调用postMessage,然后调用postMessageAndAwaitResponse。
var ret;
naclModule.postMessage(msg);
ret = naclModule.postMessageAndAwaitResponse(msg);
我的C ++应用程序中pp :: MessageHandler的实现是:
void HandleMessage(pp::InstanceHandle instance, const pp::Var& var_message)
{
for (int i = 0; i < 10000; ++i)
{
for (int j = 0; j < 10000; ++j)
++m_iRetVal;
}
}
和HandleBlockingMessage是:
pp::Var HandleBlockingMessage(pp::InstanceHandle instance, const pp::Var& var_message)
{
return pp::Var(m_iRetVal);
}
m_iRetVal是类数据成员。
我测试了这个程序,postMessageAndAwaitResponse的返回值总是100000000.我想知道HandleMlockage在这种情况下完成后是否总是执行HandleBlockingMessage? 我想调用postMessage,在HandleMessage中做大量的计算(可能花费很长时间),并调用postMessageAndAwaitResponse来获取计算结果。我可以这样做吗?
答案 0 :(得分:2)
是的,保证消息的顺序得以保留。不幸的是,我不认为我们的API文档提到了这一点。但我们已经花了很大力气确保消息按顺序到达。所以你可以确定当你之后调用postMessage然后调用postMessageAndAwaitResponse时,NaCl端将在第二个之前接收第一个(使用HandleMessage)(HandleBlockingMessage)。
这里有关于它的评论,以及一些确保它的代码: https://code.google.com/p/chromium/codesearch#chromium/src/content/renderer/pepper/message_channel.cc&l=317