我已经工作了一段时间,现在在Linux上,并做了一些C程序,现在我需要build立一个Windows应用程序,但不是很容易find警报function(发现signal.h)的替代…
问题是,在Linux中,如果将报警标志设置为SIGALRM(如果没有错误),则操作系统要做的是在报警发生时执行某些function。 例:
signal(SIGALRM, myfunc); alarm (2);
这个例子将会发生的事情是操作系统将会每2秒钟调用一次函数myfunc(在windows可能是毫秒级,但是现在不介意这个细节)。
我search了一些时间如何做到这一点在Windows上(只使用windows.h atm),但我找不到替代(在MSDN上search数千次),并在窗户上没有SIGALRM标志在signal.h …..
我可以在C中使用什么来执行与使用SIGALRM标志的警报相同的行为(换句话说,允许使用警报或类似命令执行另一个function的函数)。
检查timeSetEvent
。 这与alarm
不完全相同,但可能已经足够接近。
使用alarm
/ SIGALRM
不是一种“在给定时间运行函数”的安全方法,因为函数在信号处理上下文中被调用,在这种上下文中几乎所有的库函数都是不安全的。 真的,我唯一知道的SIGALRM
好处是建立一个sigaction
的不做任何事情的信号处理程序来中断系统调用,这样你所期望的系统调用可能会被EINTR
中断。
如果你想从现在开始执行一个给定的任务,最安全的方法是启动一个新的线程睡眠N
秒,然后执行任务。 这应该适用于任何带有线程的操作系统。
Windows也有自己的计时器事件,可以通过Windows消息系统传递,但使用它们会使你的代码更加以Windows为中心。