当前位置:首页>开发>正文

C语言如何实现定时器 C语言定时器

2023-06-27 06:37:48 互联网 未知 开发

 C语言如何实现定时器 C语言定时器

C语言如何实现定时器?

#include<time.h>
time_t t
struct tm *timer
time(&t)//t返回系统当前时间
timer=localtime(&t)//返回tm结构时间,
这样取得系统时间,再跟已定时间比较,相等则触发
结构tm定义如下:
struct tm
{
int tm_sec
int tm_min
int tm_hour
int tm_mday
int tm_mon
int tm_year
int tm_wday
int tm_yday
int tm_isdst}

C语言定时器

这个程序用多线程比较好解决.

#include
#include
#include
using namespace std

const int MAX_SECOND = 1000 * 60

DWORD WINAPI MyThread(PVOID pParam)
{
int nSum = 0

DWORD dwFirstTime = GetTickCount()

cout<<"做题开始,请在"< do
{
cout<<"1 2 = ? 请回答:"< nSum = getch()
cout< if(nSum == 3 0)
{
cout<<"答案正确"< return 0
}
}while(GetTickCount() - dwFirstTime <= MAX_SECOND)

return 0
}

int main()
{
HANDLE hThread = CreateThread(NULL, 0, MyThread, 0, NULL, NULL)
WaitForSingleObject(hThread, MAX_SECOND)
CloseHandle(hThread)
return 0
}

vc定时器问题SetTimer(1,100,NULL)

可以这么考虑!ontimer函数执行完后,程序才会重新开始计时。即这样的往复:100ms计时->500ms执行timer函数->100ms计时->500ms执行timer函数->。。。

VC定时器 SetTimer 怎么用阿

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 } }