2015-02-11 2 views
0

В javascript я вызываю postMessage в fitst, а затем вызываю postMessageAndAwaitResponse.postMessage и postMessageAndAwaitResponse?

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

и реализация пп :: 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, чтобы сделать большое количество вычислений int HandleMessage (возможно, стоит долгое время) и вызвать postMessageAndAwaitResponse, чтобы получить результат вычисления. могу ли я сделать это?

ответ

2

Да, гарантировано, что порядок сообщений сохранен. К сожалению, я не думаю, что в нашей документации API упоминается об этом. Но мы приложили огромные усилия, чтобы сообщения поступали в порядок. Поэтому вы можете быть уверены, что после вызова postMessage, а затем postMessageAndAwaitResponse сторона NaCl получит первый (с HandleMessage) до второго (HandleBlockingMessage).

Там есть комментарий здесь об этом, и некоторые из кода, что делает в этом уверен: https://code.google.com/p/chromium/codesearch#chromium/src/content/renderer/pepper/message_channel.cc&l=317

Смежные вопросы