mfc如何等待定时器执行完之后再继续后面代码
时间: 2023-08-30 18:07:02 浏览: 167
MFC多媒体定时器实例
在MFC中,可以使用WaitForSingleObject或WaitForMultipleObjects函数等待定时器事件处理程序执行完毕后再继续执行后续代码。
示例代码如下:
```
// 定义自定义消息ID和事件对象
#define WM_MYMESSAGE (WM_USER + 1)
HANDLE hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
// 设置定时器
SetTimer(1, 1000, NULL);
// 消息循环处理函数
BOOL CMyApp::PumpMessage()
{
// 处理消息队列中的消息
if (::PeekMessage(&m_msg, NULL, 0, 0, PM_REMOVE))
{
if (m_msg.message == WM_QUIT)
{
return FALSE;
}
if (!PreTranslateMessage(&m_msg))
{
::TranslateMessage(&m_msg);
::DispatchMessage(&m_msg);
}
// 处理自定义消息
if (m_msg.message == WM_MYMESSAGE)
{
// 设置事件对象
SetEvent(hEvent);
}
return TRUE;
}
// 处理定时器事件
if (m_pMainWnd != NULL && m_pMainWnd->IsWindowVisible())
{
m_pMainWnd->SendMessage(WM_TIMER, 1, 0);
}
return TRUE;
}
// 定时器事件处理函数
void CMyDlg::OnTimer(UINT_PTR nIDEvent)
{
// 执行需要的逻辑处理
// ...
// 发送自定义消息
PostMessage(WM_MYMESSAGE);
}
// 等待定时器事件处理程序执行完毕后再继续执行后续代码
WaitForSingleObject(hEvent, INFINITE);
// 关闭事件对象
CloseHandle(hEvent);
// 执行后续代码
// ...
```
在上述代码中,定义了自定义消息ID和一个事件对象hEvent。在定时器事件处理程序中,先执行需要的逻辑处理,然后调用PostMessage函数发送自定义消息。在主线程中,使用WaitForSingleObject函数等待事件对象hEvent被设置。当定时器事件处理程序执行完需要的逻辑处理后,会发送自定义消息,并在消息循环中处理该消息,设置事件对象hEvent。这时,WaitForSingleObject函数返回,后续代码得以执行。执行完后续代码后,需要关闭事件对象hEvent。
阅读全文