计时器是否支持Windows本地API?

Windows本机API是否支持定时器?

我知道Windows上的POSIX实现支持计时器,但我对Windows SDK API感兴趣。

Solutions Collecting From Web of "计时器是否支持Windows本地API?"

在POSIX定时器的环境中回答这个问题是一个棘手的问题。 Window API SetTimer在依赖线程的消息队列调度机制的GUI线程上创建一个定时器 – 这意味着在调用GetMessage / DispatchMessage的线程中的某个地方。

如果你正在编写非GUI代码,必须实现一个消息循环是一个不自然的约束: – Windows内核使用同步对象(代替信号)作为工人(即非GUI)线程提醒事件。 CreateWaitiableTimer将创建一个可以传递给工作线程中的WaitForSingleObject / WaitForMultipleObjects的句柄。

或者,你可以创建一个工作者线程 – 在那里实现一个定时器(GUI或者内核),并且在定时器发送信号时简单地调用你的(显然它必须是一个线程安全的)对象。

这个选择真的取决于你的应用程序将如何POSIX。

是的,在Win32 API中有定时器。 更多细节你可以在这里检查: 定时器

特别是你需要检查

  • SetTimer的
  • KillTimer函数
  • 的TimerProc
  • WM_TIMER

它确实如此: http : //windows-programming.suite101.com/article.cfm/using_the_win32_timer_api

在那篇文章中提到的SetTimer API取决于WM_TIMER消息,这意味着你必须有一个消息循环,这意味着你(可能)必须有一个窗口。 所以对于GUI编程来说非常有用,对于命令行工具来说更是如此。

除了上面描述的定时器之外,还有高分辨率timeSetEvent (Multimedia API)& CreateTimerQueueTimer