c++ 定时器如何实现?
答案:3 悬赏:0 手机版
解决时间 2021-03-01 12:57
- 提问者网友:焚苦与心
- 2021-02-28 21:21
c++ 定时器如何实现?
最佳答案
- 五星知识达人网友:西风乍起
- 2021-02-28 21:36
先请看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。
注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。
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。
注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。
全部回答
- 1楼网友:神的生死簿
- 2021-02-28 22:48
可以用这个方法
int timeOrigin = GetTickCount();
while( (GetTickCount() - timeOrigin) < 1000) ;
int timeOrigin = GetTickCount();
while( (GetTickCount() - timeOrigin) < 1000) ;
- 2楼网友:怀裏藏嬌
- 2021-02-28 22:19
处理窗口的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函数。
仔细理解这两句话,没有例子可写。
在需要启动定时器里调用窗口类的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函数。
仔细理解这两句话,没有例子可写。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯