我的问题是正常的mfc SetTimer,如下所示
void CTimersDlg::OnButtonBegin()
{
// create the timer
SetTimer(m_nTimerID, uElapse, NULL);
}
void CTimersDlg::OnButtonStop()
{
// destroy the timer
KillTimer(m_nTimerID);
}
void CTimersDlg::OnTimer(UINT nIDEvent) // called every uElapse milliseconds
{
// do something, but quickly
CDialog::OnTimer(nIDEvent);
}
Run Code Online (Sandbox Code Playgroud)
但是如果我需要在非dialog.cpp中使用SetTimer,例如在我的sender.cpp中如何创建计时器?在SetTimer字段中,处理程序(回调)函数?
您可以将NULL作为窗口句柄传递,并在调用中包含回调函数SetTimer.这将允许您接收计时器通知,而无需将其与特定窗口关联.
如果计划用于单独的"工作"线程(一个没有窗口),则仍需要处理消息队列以接收计时器通知.如果您正在使用CWinThread对象创建线程,则已在默认实现中为您处理CWinThread::Run.
如果您可以更新您的问题以包含有关内容的更多信息,sender.cpp我可以提供更合适的示例.这使用普通的Windows API来创建计时器并处理所需的调度队列.
// Example only.
VOID CALLBACK timerCallback(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
printf("Timer called\n");
}
void SomeFunc()
{
SetTimer(NULL, 1, 1000, timerCallback);
MSG msg;
// msg-pump
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6981 次 |
| 最近记录: |