【问题标题】:postMessage and postMessageAndAwaitResponse?postMessage 和 postMessageAndAwaitResponse?
【发布时间】:2015-02-11 08:52:28
【问题描述】:

在javascript中,我在fitst调用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 是类数据成员。

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

【问题讨论】:

    标签: google-nativeclient


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多