0

我搜索了论坛并没有找到答案。我是 VC++ 编程表单的新手。我所拥有的很简单。我想显示一个表单,然后等待来自该表单的事件,如下所示:

int APIENTRY _tWinMain(_In_ HINSTANCE hInstance, 
In_opt_ HINSTANCE hPrevInstance, 
_In_ LPTSTR CmdLine,
_In_ int nCmdShow)

{

    bool bExit = FALSE;
    Main oForm;

    g_UIThread.g_hUIEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
    g_MainLineThread.g_MainLineEvent = CreateEvent(NULL, FALSE, FALSE, NULL);

    oForm.Show();

    while (!bExit) {
        WaitForSingleObject(&g_UIThread.g_hUIEvent, INFINITE);

          (etc)

问题是表单在WaitForSingleObject. 我已经看过MsgWaitForMultipleObjects没有解决方案的替代方案。

有人可以帮忙吗?我会非常感谢。

4

1 回答 1

1

如您所知,WaitForSingleObject 正在等待单个事件。所以它不处理窗口消息。

while (!bExit) {
  if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
      // dispatch the message
  } else if (WaitForSingleObject(&g_UIThread.g_hUIEvent, 0) == WAIT_OBJECT_0) {
      // handle the event
  }
}

如果您想将 WaitForMultipleObjects 用于窗口消息,则应使用 QS_ALLINPUT 来检查事件是否已发出信号。(请注意,您应该在 PeekMessage 之前调用下面)

MsgWaitForMultipleObjects(0, NULL, FALSE, timeout, QS_ALLINPUT) == WAIT_OBJECT_0
于 2013-06-19T02:28:14.387 回答