我正在使用PNaCl,我首先收到的消息是在'HandleMessage'函数中以正常方式处理的,但是在当前的HandleMessage执行中,我需要等待用户输入来自其他消息以完成执行。
我想知道是否可以这样做(在'HandleMessage'函数中等待时处理消息)?如果是这样,有人可以给我一个技巧吗?
谢谢!
答案 0 :(得分:0)
HandleMessage
当前在一个线程(主线程)上调用。因此,在处理其他消息时,您无法收到消息。
我们通常建议您生成一个新线程来完成您的工作,并让主线程处理消息,并将它们排队以便处理新线程。请查看SDK中的nacl_io_demo
示例,了解此技术的示例(位于examples/demo/nacl_io
中)。
另一种解决方案是使用状态机;即在变量而不是堆栈中跟踪当前状态。
例如:
enum State {
STATE_INIT,
STATE_WAITING_FOR_INPUT,
STATE_DO_OTHER_STUFF,
};
State state_;
virtual void HandleMessage(const pp::Var& var_message) {
switch (state_) {
case STATE_INIT:
if (var_message.AsString() == "first_message") {
state_ = STATE_WAITING_FOR_INPUT;
// Do some work before you need the user input ...
}
break;
case STATE_WAITING_FOR_INPUT:
if (var_message.AsString() == "user_input") {
// Do more work, now that we've received input from the user...
state_ = STATE_DO_OTHER_STUFF;
}
break;
}
}