SetTimer函数疑问?

hzy694358 2009-11-12 02:25:04
SetTiemer(1,100,NULL)函数,
第一次调用OnTimer时,如果第一个100毫秒里在OnTimer消息函数里还没处理完的话,
然后又开始了调用第二次的OnTimer,这个时候,两次的这个OnTimer函数是不是
像多线程那样分开处理的。或者是其他的处理方式?
...全文
73 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzy694358 2009-11-12
  • 打赏
  • 举报
回复
结贴吧
hzy694358 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yaozhiyong110 的回复:]
你的意思是 程序在OnTimer里还没执行完  又进了OnTimer函数?  自己觉得可能吗?(多线程另
当别论)
[/Quote]
不是的,我原以为SetTimer在设定的时间到了后,上一个OnTimer函数没执行完,
就又会开始调用OnTimer,看来不是这样的
yaozhiyong110 2009-11-12
  • 打赏
  • 举报
回复
你的意思是 程序在OnTimer里还没执行完 又进了OnTimer函数? 自己觉得可能吗?(多线程另
当别论)
lonelyhacker 2009-11-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 hzy694358 的回复:]
SetTiemer(1,100,NULL)函数,
第一次调用OnTimer时,如果第一个100毫秒里在OnTimer消息函数里还没处理完的话,
然后又开始了调用第二次的OnTimer,这个时候,两次的这个OnTimer函数是不是
像多线程那样分开处理的。或者是其他的处理方式?

[/Quote]

如果LZ是在第一个没结束的时候就开始调用了第二次的OnTimer的话,那就是多线程的处理。。
lonelyhacker 2009-11-12
  • 打赏
  • 举报
回复

SetTimer(1,100,NULL);
SetTimer(2,100,NULL);

OnTimer(nIDEvent)
{
switch(nIDEvent)
{
case 1:
//干什么
break;
case 2:
//干什么
break;
}
}


Window会根据你的nIDEvent参数来决定那个。如果在一个定时程序结束之前就响应另一个,就需要多线程。
这不是鸭头 2009-11-12
  • 打赏
  • 举报
回复
void CTest_SetTimerDlg::OnButton1() 
{
// 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);
}
这不是鸭头 2009-11-12
  • 打赏
  • 举报
回复
貌似要等上一句执行完毕.没有执行完则堵塞在这里
ezhuyin 2009-11-12
  • 打赏
  • 举报
回复
SetTimer本质上是发送WM_TIMER的消息到窗口消息队列。队列消息是按先进先出的方式处理的,所以实际上第一个OnTimer没有处理完是不会开始第二个OnTimer的。当然,如果你在OnTimer里面建立一个新线程来处理任务的话,那另当别论。
bragi523 2009-11-12
  • 打赏
  • 举报
回复
ontimer应该是只开一个线程的
所以只能做一件事
再来排队
一条晚起的虫 2009-11-12
  • 打赏
  • 举报
回复
// 排队的。
fege_fege 2009-11-12
  • 打赏
  • 举报
回复
关注。
这种问题可以做个测试。

OnTimer触发的时候打印一句log,
里面处理 做个很大的循环,超过100ms的,循环结束再打印一句log,就可以看出来是什么样子的处理方式了。

//本人么的环境进行测试

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧