2015-02-11 40 views
0

在javascript中,我在fitst中調用postMessage,然後調用postMessageAndAwaitResponse。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.我想知道在這種情況下HandleMessage完成後HandleBlockingMessage是否總是執行? 我想調用postMessage,做大量的計算int HandleMessage(可能花費很長時間),並調用postMessageAndAwaitResponse來獲得計算結果。我可以這樣做嗎?

回答

2

是的,它保證了消息的順序被保留。不幸的是,我不認爲我們的API文檔提到了這一點。但我們竭盡全力確保消息按順序到達。所以你可以確定,當你調用postMessage,然後postMessageAndAwaitResponse後,NaCl端將在第二個(HandleBlockingMessage)之前接收第一個(使用HandleMessage)。

這裏有一個評論它,和一些代碼,使得它肯定: https://code.google.com/p/chromium/codesearch#chromium/src/content/renderer/pepper/message_channel.cc&l=317