C语言写5分钟的定时器的方法及代码详解

在 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() 函数来分派消息。