在Linux上用C调用异步,定时函数?

Del*_*ani 5 c linux asynchronous timer

Linux上的C中最容易,最有效的方法是在一定延迟(如JavaScript setTimeout)之后异步调用函数,或者定期调用重复定时器(类似于setInterval)?

虽然这个问题适用于Linux,但我希望有一种跨平台的方法.

Vij*_*hew 9

最简单的Linux特定解决方案是使用该alarm功能:

void alarm_handler (int signum)
{
    printf ("Five seconds passed!\n");
}

signal (SIGALRM, alarm_handler);
alarm (5);
Run Code Online (Sandbox Code Playgroud)

getitimersetitimer函数可用于创建具有更高精度的计时器.(更多......)


Blr*_*rfl 7

有两种方法可以解决它:

First, as mentioned in another answer, is signals triggered using alarm() or setitimer(). Both functions are available in any OS that adheres to POSIX; there's a third function called ualarm() which was obsoleted in 2008. The down side is that it's unsafe to do anything significant (e.g., I/O or other system calls) in a signal handler, so really all you want to do is maybe set a flag and let something else pick it up.

其次是使用休眠一定的时间间隔一个线程,然后调用你的函数.POSIX线程标准在90年代初的延伸,和最现代化的操作系统支持线程支持POSIX线程.这里的缺陷是,你必须了解有两个执行上下文的含义共享相同的数据空间,并相应设计程序,否则你会碰到的问题,可以是一个噩梦调试.

请注意,报警和睡觉只答应做他们以后做什么,至少在规定的时间量已过去,所以你不能保证的那种精确度,你会得到一个实时操作系统上.