postMessage 和 postMessageAndAwaitResponse?

postMessage and postMessageAndAwaitResponse?

在javascript中,我适时调用postMessage,然后调用postMessageAndAwaitResponse。

var ret;
naclModule.postMessage(msg);
ret = naclModule.postMessageAndAwaitResponse(msg);

并且 pp::MessageHandler 在我的 C++ 应用程序中的实现是:

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 是 class 数据成员。

我测试了这个程序,postMessageAndAwaitResponse的return值一直是100000000。我想知道在这种情况下HandleBlockingMessage是否总是在HandleMessage结束后执行? 我想调用postMessage,对int HandleMessage做大量的计算(可能需要很长时间),调用postMessageAndAwaitResponse得到计算结果。我可以这样做吗?

是的,保证保留消息的顺序。不幸的是,我认为我们的 API 文档没有提到这一点。但我们竭尽全力确保消息按顺序到达。所以你可以确定当你调用 postMessage 然后调用 postMessageAndAwaitResponse 时,NaCl 端将在第二个 (HandleBlockingMessage) 之前收到第一个 (with HandleMessage)。

这里有一条关于它的评论,以及一些确保它的代码: https://code.google.com/p/chromium/codesearch#chromium/src/content/renderer/pepper/message_channel.cc&l=317