SetTiemer(1,100,NULL)函数,
第一次调用OnTimer时,如果第一个100毫秒里在OnTimer消息函数里还没处理完的话,
然后又开始了调用第二次的OnTimer,这个时候,两次的这个OnTimer函数是不是
像多线程那样分开处理的。或者是其他的处理方式?
第一次调用OnTimer时,如果第一个100毫秒里在OnTimer消息函数里还没处理完的话,
然后又开始了调用第二次的OnTimer,这个时候,两次的这个OnTimer函数是不是
像多线程那样分开处理的。或者是其他的处理方式?
这种问题可以做个测试。OnTimer触发的时候打印一句log,
里面处理 做个很大的循环,超过100ms的,循环结束再打印一句log,就可以看出来是什么样子的处理方式了。//本人么的环境进行测试
所以只能做一件事
再来排队
{
// TODO: Add your control notification handler code here
SetTimer(1,100,NULL);
}void CTest_SetTimerDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
static int nNum = 0;
static int nNum2 = 0;
if (nIDEvent==1)
{
CString str;
str.Format("%d",nNum);
SetWindowText(str); Sleep(2000);
nNum++;
}
CString str2;
str2.Format("%d",nNum2);
SetDlgItemText(IDC_BUTTON1,str2);
nNum2++;
CDialog::OnTimer(nIDEvent);
}
SetTimer(1,100,NULL);
SetTimer(2,100,NULL); OnTimer(nIDEvent)
{
switch(nIDEvent)
{
case 1:
//干什么
break;
case 2:
//干什么
break;
}
}
Window会根据你的nIDEvent参数来决定那个。如果在一个定时程序结束之前就响应另一个,就需要多线程。
如果LZ是在第一个没结束的时候就开始调用了第二次的OnTimer的话,那就是多线程的处理。。
当别论)
就又会开始调用OnTimer,看来不是这样的