c - 定时器实现超时功能

标签 c multithreading winapi timer

我正在用 C 编写一个 Windows (Win32) 程序,它具有一个工作线程来处理来自 USB 硬件设备的数据。线程处理一切正常,但是我现在需要添加一个计时器来处理超时功能。我不需要回调函数,只需要启动单次拍摄计时器的能力,并且能够在不 sleep 的情况下测试天气,就像这样:

start_timout(1000);   // 1 second

while (timer_is_running())
{
  doing stuff while waiting...
  .
  .
  .
}

do stuff after timer is finished...
.
.
.

这将在工作线程内运行。

我查看了 SetTimer(),并尝试创建一个回调函数,它只设置一个全局标志,然后测试该标志,但从未设置。我不确定这是不是因为我的线程中没有消息处理程序。

欢迎任何建议..干杯!

最佳答案

感谢您的回复,我很快就完成了一些工作。这是我的工作代码的提炼:

#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 - 定时器实现超时功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30126609/

相关文章:

c - 寻找一种使用 Lotus Notes 当前 "session"的方法

java - 在 for 循环内的主线程中调用 AsyncTask

Python - 检查队列中的所有任务是否已完成

winapi - 使用 dllexport 从 DLL 导出函数

c - 为什么 gcc 和 clang 没有将 strlen 提升到这个循环之外?

c - "ld returned 1 exit status"和 "incompatible implicit declaration of built-in function ' 退出 ' "

c - 在内核中高效分配内存

ios - heightForRowAtIndexPath 中的线程问题

c# - 如何使用模态窗口将 WM_INPUTLANGCHANGEREQUEST 发送到应用程序?

c++ - 使用自由函数作为 LPOVELAPPED_COMPLETION_ROUTINE