在 C 语言中实现 5 分钟的定时器,可以使用 <time.h>
头文件中的 time()
函数来获取当前时间,并结合计时器来实现。
下面是一个简单的示例代码:
#include <stdio.h> #include <time.h> int main() { time_t start_time, current_time; int elapsed_time; start_time = time(NULL); // 获取当前时间 while (1) { current_time = time(NULL); // 获取当前时间 elapsed_time = difftime(current_time, start_time); // 计算经过的时间 if (elapsed_time >= 300) { // 判断是否达到 5 分钟 printf("5 minutes have passed.\n"); break; } } return 0; }
在上面的代码中,首先使用 time()
函数获取当前时间,然后进入一个循环,在循环中不断获取当前时间,并计算与开始时间的时间差,直到经过的时间达到 5 分钟为止。需要注意的是,difftime()
函数返回的是以秒为单位的时间差,因此需要判断经过的时间是否大于等于 300 秒(即 5 分钟),才能跳出循环。
如果需要在定时器到达时执行某个操作,可以在到达时向主线程发送一个自定义消息,然后在主线程中处理该消息。下面是一个简单的示例代码:
#include <windows.h> #define WM_TIMER_EXPIRED WM_USER + 1 // 自定义消息 void CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { PostMessage(hwnd, WM_TIMER_EXPIRED, 0, 0); // 向主线程发送自定义消息 } int main() { HWND hwnd = NULL; // 窗口句柄,可以为 NULL UINT_PTR timer_id = SetTimer(hwnd, 1, 300000, TimerProc); // 创建定时器,每隔 5 分钟触发一次 TimerProc 函数 MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { // 消息循环 if (msg.message == WM_TIMER_EXPIRED) { // 处理自定义消息 printf("5 minutes have passed.\n"); } DispatchMessage(&msg); } KillTimer(hwnd, timer_id); // 销毁定时器 return 0; }
在上面的代码中,首先创建了一个 5 分钟的定时器,每到达一次定时器时,就向主线程发送一个自定义消息。在消息循环中,判断是否收到了自定义消息,如果收到了,就执行相应的操作。需要注意的是,在使用 Windows API 时,需要在消息循环中调用 DispatchMessage()
函数来分派消息。
评论