postMessage和postMessageAndAwaitResponse?

时间:2015-02-11 08:52:28

标签: google-nativeclient

在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来获取计算结果。我可以这样做吗?

1 个答案:

答案 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