QT开发中文网

windows下 使用timeBeginPeriod(1) 之后,再使用CreateTimerQueueTimer定时器,多线程编程,周期性定时,写一个C代码例子

下面是一个简单的 C 代码例子,使用了 timeBeginPeriod(1) 和 CreateTimerQueueTimer 定时器,多线程编程,实现了周期性定时功能。

#include <stdio.h>
#include <Windows.h>

// 定时器回调函数
VOID CALLBACK TimerCallback(PVOID lpParam, BOOLEAN TimerOrWaitFired)
{
    printf("Timer callback executed.\n");
}

int main()
{
    // 设置系统计时器精度为 1 毫秒
    timeBeginPeriod(1);

    // 创建定时器队列
    HANDLE hTimerQueue = CreateTimerQueue();

    // 创建定时器
    HANDLE hTimer = NULL;
    CreateTimerQueueTimer(&hTimer, hTimerQueue, TimerCallback, NULL, 0, 1000, 0);

    // 等待定时器结束
    Sleep(5000);

    // 删除定时器
    DeleteTimerQueueTimer(hTimerQueue, hTimer, NULL);

    // 删除定时器队列
    DeleteTimerQueueEx(hTimerQueue, NULL);

    return 0;
}

在该示例程序中,我们首先调用 timeBeginPeriod 函数设置系统计时器精度为 1 毫秒。然后创建了一个定时器队列,并创建了一个定时器,每隔 1000 毫秒就会触发一次 TimerCallback 回调函数。

在主函数中,我们等待定时器执行了 5 秒钟后,删除定时器并删除定时器队列。最后,程序退出。

需要注意的是,在 CreateTimerQueueTimer 函数中,最后一个参数为事件类型,可以设置为 WT_EXECUTEDEFAULT 或者 WT_EXECUTEONLYONCE。如果设置为 WT_EXECUTEDEFAULT,表示定时器是周期性的,会一直触发回调函数;如果设置为 WT_EXECUTEONLYONCE,表示定时器只会触发一次回调函数。

另外,在回调函数中,我们可以通过 TimerOrWaitFired 参数判断是定时器超时还是等待对象触发。由于这里使用的是定时器,所以该参数始终为 TRUE。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=724

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?