我使用MFC在c++中编程。
我希望在UI完全加载后执行一段代码,因此我将其放在OnTimer回调中并在OnInitDialog中调用SetTimer。问题是如何让计时器只执行一次?
任何帮助都将不胜感激。
发布于 2013-05-12 01:09:14
你必须使用计时器函数,但你需要小心,因为只执行一次KillTimer。例如,您可以编写如下代码,
#define TID_ONLY_ONCE WM_USER + 202
void CSampleDlg::OnTimer(UINT_PTR nIDEvent)
{
if(nIDEvent == TID_ONLY_ONCE)
{
KillTimer(TID_ONLY_ONCE);
SomethingLongProcess(pSomeData);
}
CDialog::OnTimer(nIDEvent);
}
如果您将计时器设置为较短时间,尽管您调用了KillTimer,但'ontimer()‘将被执行多次,因为SomethingLongProcess需要很长的时间。所以,为了避免这种情况,
我希望这能对你有所帮助。
发布于 2013-05-13 03:06:45
除了使用计时器,您还可以使用PostMessage发布自己的消息,这将使挂起的窗口消息队列得到处理。然后,您可以在PostMessage处理程序中执行您想要的操作。那样的话,你就不必担心杀死计时器了。(参见http://msdn.microsoft.com/en-us/library/9tdesxec%28v=vs.80%29.aspx)
发布于 2013-05-12 00:13:32
第一次调用计时器函数时,调用KillTimer。
https://stackoverflow.com/questions/16501858
复制相似问题