我使用MFC在c ++中编程。
我希望在UI完全加载后执行一段代码,所以我把它放在OnTimer回调中并在OnInitDialog中调用SetTimer。问题是如何使该计时器只执行一次?
任何帮助都将不胜感激。
答案 0 :(得分:2)
你必须使用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需要很长时间。 所以,为了避免这种情况,
我希望这对你有所帮助。
答案 1 :(得分:1)
您也可以使用PostMessage向自己发布消息,而不是使用计时器,这将使待处理的窗口消息队列得到处理。然后,您可以在PostMessage处理程序中执行您想要的操作。这样你就不用担心杀死计时器了。 (见http://msdn.microsoft.com/en-us/library/9tdesxec%28v=vs.80%29.aspx)
答案 2 :(得分:-1)
第一次调用timer函数时,调用KillTimer。