mfc如何设定定时器执行完之后在继续后面代码
时间: 2023-08-30 11:07:02 浏览: 142
在MFC中,可以使用SetTimer函数来设置定时器,并在消息循环中处理WM_TIMER消息来响应定时器事件。当定时器事件发生时,会触发WM_TIMER消息,并执行相应的处理程序。
若要在定时器事件处理程序中执行完毕后继续执行后面的代码,可以使用PostMessage函数将一个自定义消息发送到消息队列,并在消息循环中处理该消息。在定时器事件处理程序中,先执行需要的逻辑处理,然后调用PostMessage函数发送自定义消息,在自定义消息的处理程序中执行后续的代码。
示例代码如下:
```
// 定义自定义消息ID
#define WM_MYMESSAGE (WM_USER + 1)
// 设置定时器
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)
{
// 执行后续代码
// ...
}
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);
}
```
在上述代码中,定时器的ID为1,间隔为1000毫秒。在消息循环中处理自定义消息时,先判断当前消息是否为自定义消息,如果是,则执行后续代码。在定时器事件处理函数中,先执行需要的逻辑处理,然后调用PostMessage函数发送自定义消息。这样,在定时器事件处理程序中执行完需要的逻辑处理后,会发送自定义消息,并在消息循环中处理该消息,执行后续的代码。
阅读全文