在javascript中,我在fitst调用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。我想知道,在这种情况下,HandleBlockingMessage是否总是在HandleMessage完成后执行?我希望调用postMessage,在HandleMessage中做大量的计算(可能要花费很长时间),并调用postMessageAndAwaitResponse来获得计算结果。我可以这样做吗?
发布于 2015-02-11 17:01:36
是的,它保证消息的顺序被保留。不幸的是,我认为我们的API文档没有提到这一点。但我们已经尽了很大的努力确保信息的传递是有序的。因此,您可以确保在调用postMessage之后调用postMessageAndAwaitResponse时,NaCl端将在第二个(HandleBlockingMessage)之前接收第一个(带有HandleMessage)。
这里有一个关于它的注释,以及一些确保它的代码:channel.cc&l=317
https://stackoverflow.com/questions/28450060
复制相似问题