定时器实现超时功能
Timer to implement a time-out function
我正在用 C 编写一个 Windows (Win32) 程序,它具有一个工作线程来处理来自 USB 硬件设备的数据。线程处理一切正常,但是我现在需要添加一个计时器来处理超时功能。我不需要回调函数,只需要启动单次计时器的能力,并且能够在不睡觉的情况下测试天气,就像这样:
start_timout(1000); // 1 second
while (timer_is_running())
{
doing stuff while waiting...
.
.
.
}
do stuff after timer is finished...
.
.
.
这将是 运行 在工作线程中。
我查看了 SetTimer(),并尝试创建一个回调函数,它只设置一个全局标志,然后测试该标志,但从未设置。我不确定这是不是因为我的线程中没有消息处理程序。
欢迎提出任何建议..干杯!
SetTimer 要求您在 window 中捕获 WM_TIMER 事件,除此之外,它不是很准确。我不建议使用它。
相反,您可以简单地创建另一个线程,让它在指定的时间段内除了 Sleep() 之外什么都不做(您可以在创建线程时将时间作为参数传递)。然后您可以 WaitForSingleObject(sleeper_thread, 0)
检查超时是否已过。
感谢您的回复,我的工作很快。这是我的工作代码的提炼:
#include <windows.h>
static void func(void)
{
HANDLE hTimer = NULL;
LARGE_INTEGER liDueTime;
liDueTime.QuadPart = -5000000LL; // 0.5 seconds
//liDueTime.QuadPart = -20000000LL; // 2 seconds
//liDueTime.QuadPart = -100000000LL; // 10 seconds
hTimer = CreateWaitableTimer(NULL, TRUE, NULL);
SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0);
while (WaitForSingleObject(hTimer, 0) == WAIT_TIMEOUT)
{
do stuff
}
}
此致,
图尼.
我正在用 C 编写一个 Windows (Win32) 程序,它具有一个工作线程来处理来自 USB 硬件设备的数据。线程处理一切正常,但是我现在需要添加一个计时器来处理超时功能。我不需要回调函数,只需要启动单次计时器的能力,并且能够在不睡觉的情况下测试天气,就像这样:
start_timout(1000); // 1 second
while (timer_is_running())
{
doing stuff while waiting...
.
.
.
}
do stuff after timer is finished...
.
.
.
这将是 运行 在工作线程中。
我查看了 SetTimer(),并尝试创建一个回调函数,它只设置一个全局标志,然后测试该标志,但从未设置。我不确定这是不是因为我的线程中没有消息处理程序。
欢迎提出任何建议..干杯!
SetTimer 要求您在 window 中捕获 WM_TIMER 事件,除此之外,它不是很准确。我不建议使用它。
相反,您可以简单地创建另一个线程,让它在指定的时间段内除了 Sleep() 之外什么都不做(您可以在创建线程时将时间作为参数传递)。然后您可以 WaitForSingleObject(sleeper_thread, 0)
检查超时是否已过。
感谢您的回复,我的工作很快。这是我的工作代码的提炼:
#include <windows.h>
static void func(void)
{
HANDLE hTimer = NULL;
LARGE_INTEGER liDueTime;
liDueTime.QuadPart = -5000000LL; // 0.5 seconds
//liDueTime.QuadPart = -20000000LL; // 2 seconds
//liDueTime.QuadPart = -100000000LL; // 10 seconds
hTimer = CreateWaitableTimer(NULL, TRUE, NULL);
SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0);
while (WaitForSingleObject(hTimer, 0) == WAIT_TIMEOUT)
{
do stuff
}
}
此致, 图尼.