c++ 定时器如何实现?
c++怎么没有timer控件啊,我要每隔1s触发一次事件怎么办?听说可以用settimer怎么用啊???????求一简单实例程序,比如用静态文本框显示当前时间~~...
c++怎么没有timer控件啊,我要每隔1s触发一次事件怎么办?
听说可以用settimer 怎么用啊???????
求一简单实例程序,比如用静态文本框显示当前时间~~ 展开
听说可以用settimer 怎么用啊???????
求一简单实例程序,比如用静态文本框显示当前时间~~ 展开
3个回答
展开全部
处理窗口的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 <windows.h>
#include <stdio.h>
在需要启动定时器里调用窗口类的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 <windows.h>
#include <stdio.h>
追问
举个例看
在哪个地方写settimer
哪个地方写on timer
我要在某个按键按下后 void CMy0Dlg::OnButton1()
触发定时器,怎么做啊?
追答
处理窗口的WM_TIME消息。添加处理函数OnTimer并编写你的处理代码。
在需要启动定时器里调用窗口类的SetTimer函数。
仔细理解这两句话,没有例子可写。
展开全部
先请看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。
注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以用这个方法
int timeOrigin = GetTickCount();
while( (GetTickCount() - timeOrigin) < 1000) ;
int timeOrigin = GetTickCount();
while( (GetTickCount() - timeOrigin) < 1000) ;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询