我如何使用SetTimer在非对话框.cpp在我的mfc应用程序
How do I use SetTimer in non-dialog .cpp in my mfc app?
我的问题是正常的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);
}
但是如果我需要在非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 calledn");
}
void SomeFunc()
{
SetTimer(NULL, 1, 1000, timerCallback);
MSG msg;
// msg-pump
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
SetTimer与windows相关联,您需要windows句柄才能使用它。对于非窗口类,你应该考虑使用CreateWaitableTimer或TimerQueue
相关文章:
- 模板专业化可以进入我的.cpp吗?
- 我应该将除 .cpp 以外的其他文件添加到 git 中吗?
- 反向功能超出了我的 cpp 程序的范围
- "configure"脚本如何检测我的系统是否支持某些头文件或 cpp 功能?
- 为什么我的主文件.cpp不打印头文件中的任何内容
- 为什么我的 cpp 数组大小是 4 的倍数?
- 编译器正在查找.当"实施"完全在"我的"中时的CPP文件.HPP文件
- LNK2001尝试将我的主函数分离为主.cpp时,我有一个奇怪的错误
- 为什么我的.cpp文件无法解析 .h 文件中声明的变量?
- 我想从安卓工作室访问 .so lib 及其 cpp 文件的方法
- 似乎无法将我的标题文件与我的CPP文件连接到链接列表中
- 为什么我的 cpp 程序在第一行后挂断
- 如何使用 DevC++ 将 lodepng.cpp 和 lodepng.h 添加到我的项目中
- 在我的 cpp 或头文件中找不到错误,类构建失败
- 在所有CPP文件中使用一个Globe变量.如果CPP文件的一个类更改该值,我想从另一个类CPP文件访问它
- 我可以在我的 cmake 代码中手动使用 CMake 的 cpp 文件依赖项扫描程序吗?
- 为什么我的 cpp 代码显示分段错误
- 对于我的 ComplexNumber 中的某些方法,我得到了一个奇怪的未定义错误引用.cpp,不过我对模板很陌生
- 无论如何,在我的主文件之外传递 argc、argv .cpp
- 我的类在 .h 文件中定义,.cpp文件找不到