6

对 UNIX 和 Windows 上的 C 语言中类似于 JavaScript setTimeout 的东西感兴趣。

基本上,我想要:

start_timer(&function_pointer, int time_in_secs)

或尽可能接近。

此外,类似于 setInterval 的东西会很好(它每 n 秒调用一次回调),但这可以使用 setTimeout 实现:)

4

5 回答 5

8

在 Win32 中使用TimerProc作为回调的SetTimer 。

/* calls TimerProc once every 60000 milliseconds */
SetTimer(NULL, 1, 60000, TimerProc);
于 2009-05-15T02:01:49.130 回答
5

您可能想尝试使用 POSIX 间隔计时器 timer_create 和 timer_settime,因为它允许您直接指定回调函数而不使用信号。要让计时器只过期一次(而不是继续重复):

timer_settime:定时器的重载值应设置为 value 的 it_interval 成员指定的值。当定时器配备非零 it_interval 时,将指定一个周期性(或重复性)定时器。

以下是有关使用这些计时器的大量文档,其中包含来自 kernel.org 上的 Linux 程序员手册的一个很好的示例:

timer_create - 创建一个 POSIX 每个进程的计时器

于 2009-05-15T03:50:42.940 回答
2

对于 UNIX man setitimer,.

于 2009-05-15T01:13:09.590 回答
1

关于 alarm() 和 setitimer() 的一些信息可以在这里找到。请注意,upcall 函数是一个信号处理程序,因此它受制于与信号处理程序相关的所有限制和限制,如此处详细描述

如第一个链接所述,alarm() 是基于 POSIX 的,而 setitimer() 不是(尽管它更灵活)。

于 2009-05-15T01:24:16.723 回答
-1

试试油嘴滑舌。如果您需要可移植的代码,那么您很可能无法编写比它们更可移植的东西;)

http://library.gnome.org/devel/glib/2.20/glib-The-Main-Event-Loop.html#g-timeout-add

于 2009-05-15T01:19:07.140 回答