作者timohu ( )
看板C_and_CPP
标题[问题] 有关Timer的运作方式[MFC]
时间Tue Apr 28 16:19:32 2009
我是使用VC6.0的MFC(dialog base)来进行开发
请问OnTimer中
当引发某个nIDEvent後
是不是会等到该case里的程序跑完
才会在引发其他nIDEvent触发的事件?
我在原本的程式中,
利用SetTimer(1,1000,NULL)以使视窗上某个LOGO持续转动
(也就是每一秒会转动一个方向,)
switch(nIDEvent)
{
case 1:
KillTimer(1);
Count++;
if(Count>=5) Count=1;
if(Count==1) m_bmpCtrl1.LoadFile(1);
if(Count==2) m_bmpCtrl1.LoadFile(2);
if(Count==3) m_bmpCtrl1.LoadFile(3);
if(Count==4) m_bmpCtrl1.LoadFile(4);
break;
case 2:.........
然後,因为程式的主要目地,是利用TCP/IP与某个设备进行沟通
并把资料显示在视窗的项目上,并持续更新
关於这个更新的程序,我利用SetTimer(2...)来达成
但是因为这个更新过程会超过一秒钟(about 5s),也使得原本该每秒转动的LOGO
都要等待Timer #2 完成动作後,才会转动,
甚至在那五秒的过程中,想要对视窗进行操作也会没有反应 或lag
例如切换tab页面、选择combo box的项目以及按下视窗上的button
如果真的是如一开始所说这样,timer不会同时存在?
那是不是我要改变程式的写法?
利用多执行绪 或是 把那五秒的程序拉到timer之外来执行
然後timer #2触发时,利用msg的传递来触发扫瞄设备更新资料的程序?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 116.59.33.252
1F:→ pico2k:用另一个thread来控制UI... 04/28 17:34
2F:→ yk66:timer只是WM_TIMER, 不是执行绪! 解决方法就像你最後一段所说 04/29 09:09
3F:→ yk66:但我觉得有必要每次都LoadFile吗..Count不直接丢进函数里吗.. 04/29 09:10