2010-05-18 47 views

回答

2

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

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

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

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

4

它肯定不会:http://windows-programming.suite101.com/article.cfm/using_the_win32_timer_api

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

+0

消息接收器的窗口不需要可见,因此它可以用于任何类型的应用程序。没有窗口,你真的无法用WinAPI做很多事情。 – Alan 2010-05-18 15:04:46