永发信息网

c++ 定时器如何实现?

答案:3  悬赏:0  手机版
解决时间 2021-03-01 12:57
c++ 定时器如何实现?
最佳答案
先请看SetTimer这个API函数的原型:
UINT_PTR SetTimer(
HWND hWnd, // 窗口句柄
UINT_PTR nIDEvent, // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
UINT uElapse, // 时间间隔,单位为毫秒
TIMERPROC lpTimerFunc // 回调函数
);

例如
SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器
在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了,
例如:
UINT SetTimer(1,100,NULL);
函数反回值就是第一个参数值1,表示此定时器的ID号。
第二个参数表示要等待100毫秒时间再重新处理一次。
第三个参数在这种方法中一般用NULL。
注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。
全部回答
可以用这个方法

int timeOrigin = GetTickCount();
while( (GetTickCount() - timeOrigin) < 1000) ;
处理窗口的WM_TIME消息。添加处理函数OnTimer并编写你的处理代码。
在需要启动定时器里调用窗口类的SetTimer函数。
SetTimer ( ID, time, callbreakfunction);
意思为:
参数1,定时器ID
参数2,回调函数多久被调用一次,单位为千分之一秒、
参数3,回调函数,如果为NULL,则调用OnTimer
另外一个方法是使用线程,但这会麻烦些。如果你刚开始是学VB的。那建议你耐心看,慢慢来,VC远比VB复杂一百倍。
设计一个线程入口函数,使用Sleep函数来暂停线程
DWORD WINAPI thread_proc(LPVOID lpParam)
{
for(int i = 0; i < ( int * ) lpParma; i ++ )
{
Sleep( 1000 );//间隔1秒
printf("%d,", i );//注意,在线程中使用控制台要确保它有stdout输出句柄
}
return 0;
}
在main函数中:
CreateThread( NULL, NULL, thread_proc, NULL, NULL );//全默认就行
最后别忘了添加头文件:
#include
#include 追问举个例看
在哪个地方写settimer
哪个地方写on timer
我要在某个按键按下后 void CMy0Dlg::OnButton1()
触发定时器,怎么做啊?追答处理窗口的WM_TIME消息。添加处理函数OnTimer并编写你的处理代码。
在需要启动定时器里调用窗口类的SetTimer函数。
仔细理解这两句话,没有例子可写。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
皇明擦鞋店这个地址在什么地方,我要处理点事
这一刻,我更加心痛了!拥抱着一个不属于你的
会当凌绝顶,是什么意思呀
那里有卖助听器电池的,我给老人买的助听器,买
逸豪浴足我想知道这个在什么地方
申学app中的语文书怎么下不了
必胜猜拳游戏规则 急急急
中国联通宝塔合作厅这个地址在什么地方,我要
【昆泰大厦】一句话汉译英北京市朝阳区朝外大
一并的意思
孟子说:“老吾老以及人之老,幼吾幼以及人之
江苏省计算机二级c语言编程题评分标准
定成地产有限公司在什么地方啊,我要过去处理
初等矩阵的逆是可以直接写出来的吗
下列属于物理变化的是AA. 冰雪融化B. 牛奶变
推荐资讯
河北省石家庄市裕华区空中花园附近有没有清真
下列属于生态系统的是CA. 池塘中的水B. 池塘
芜湖科特电缆有限公司在什么地方啊,我要过去
大井地址有知道的么?有点事想过去
在淘宝怎么进阿里妈妈
邱庄子地址在什么地方,想过去办事
CSS预处理器,LESS OR SASS,用哪个好呢
西洋生怎么吃
以下关于充血性心力衰竭患儿的护理措施叙述正
荔湾广场北塔在什么地方啊,我要过去处理事情
空调一闪一闪绿灯,不工作,怎么修,什么原因
上海万臣金属构件厂我想知道这个在什么地方
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?