【发布时间】:2020-02-23 16:39:26
【问题描述】:
标题说明了一切。 我已经看到了 C++ 中的解决方案。例如,this one 和一些(也是 C++)相当古老的。 我愿意使用 glib 或任何其他开源库。我只关心 Linux 的实现。
我遇到了 glib 的 timer functions,但它们本质上都是同步的,并不接近 setTimeout() 的作用。
我可以想到一种解决方案,即拥有一个单独的线程,该线程在一个循环中不断地检查计时器(例如 Glib 提供的计时器)是否已过期,然后触发相应的函数。当然,这样效率会低得离谱。
我也遇到了这个here,它建议使用alarm(2)。它可以使用,但粒度仅以秒为单位。
编辑:唉,alarm() 取消任何以前设置的 alarm()
【问题讨论】:
-
看看闹钟和设置定时器功能。警报会生成信号,因此您需要一个信号处理程序。
-
我添加了linux 标签,因为你说这是你关心的操作系统,而且这个问题在标准 C 中没有答案。
-
请注意,如果您从基于事件的单线程应用程序架构转向多线程应用程序,请为痛苦的世界做好准备。我会寻找“C 事件库”而不是类似这样的线程。
-
@asinix 通常在 Linux 中,事件循环围绕
select(或等效的)系统调用进行编程,超时设置为下一个计时器事件。不需要中断定时器机制或信号。可以有任意数量的计时器。 -
@hyde 就是这样!!非常感谢。现在我明白你为什么要谈论关于定时器的事件循环了!当然是一个优雅的解决方案。
标签: c linux asynchronous settimeout glib