c语言中怎么设置计时器?

c语言中怎么设置计时器?,第1张

#include <iostream>

#include <time.h>

using namespace std

int main()

{

clock_t start = clock()

//do some process here

clock_t end = (clock() - start)/CLOCKS_PER_SEC

cout<<"time comsumption is "<<end<<endl

}

扩展资料

使用linux的系统设置计时器

#include <sys/time.h>

int main()

{

timeval starttime,endtime

gettimeofday(&starttime,0)

//do some process here

gettimeofday(&endtime,0)

double timeuse = 1000000*(endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - startime.tv_usec

timeuse /=1000//除以1000则进行毫秒计时,如果除以1000000则进行秒级别计时,如果除以1则进行微妙级别计时

}

timeval的结构如下:

strut timeval

{

long tv_sec/* 秒数 */

long tv_usec/* 微秒数 */

}

SetTimer函数的用法

1 )用WM_TIMER来设置定时器

先请看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类中,调用就不用指定窗口句柄了

于是SetTimer函数的原型变为:

UINT SetTimer(UINT nIDEvent,UINT nElapse,void(CALLBACK EXPORT *lpfnTimer)(HWND,UINT ,YINT ,DWORD))

当使用SetTimer函数的时候,就会生成一个计时器。函数中nIDEvent指的是计时器的标识,也就是名字。nElapse指的是时间间隔,

也就是每隔多长时间触发一次事件。第三个参数是一个回调函数,在这个函数里,放入你想要做的事情的代码,你可以将它设定为NULL,

也就是使用系统默认的回调函数,系统默认认的是onTime函数。这个函数怎么生成的呢?你需要在需要计时器的类的生成onTime函数:

在ClassWizard里,选择需要计时器的类,添加WM_TIME消息映射,就自动生成onTime函数了。然后在函数里添加代码,让代码实现功能。

每隔一段时间就会自动执行一次。

例:

SetTimer(1,1000,NULL)

1:计时器的名称;

1000:时间间隔,单位是毫秒;

NULL:使用onTime函数。

当不需要计时器的时候调用KillTimer(nIDEvent)

例如:KillTimer(1)

2) 调用回调函数

此方法首先写一个如下格式的回调函数

void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)

然后再用SetTimer(1,100,TimerProc)函数来建一个定时器,第三个参数就是回调函数地址。

二. 或许你会问,如果我要加入两个或者两个以上的 timer怎么办?

继续用SetTimer函数吧,上次的timer的ID是1,这次可以是2,3,4。。。。

SetTimer(2,1000,NULL)

SetTimer(3,500,NULL)

嗯,WINDOWS会协调他们的。当然onTimer函数体也要发生变化,要在函数体内添加每一个timer的处理代码:

onTimer(nIDEvent)

{

switch(nIDEvent)

{

case 1:........

break

case 2:.......

break

case 3:......

break

}

}

vc不像VB并没有timer控件,如果想要添加一个定时器,只要调用SetTimer就可以了,具体用法可看MSDN,关掉就是KillTimer

例如:

SetTimer(1,1000,NULL)

KillTimer(1)

你再添加对WM_TIMER消息的映射函数OnTimer函数就可以了。

如果有问题HI我


欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/bake/11204736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存