对如何在 C 中实现一段时间后异步调用的计时器感兴趣。在这里,假设设置了一个 javascript 计时器:
setTimeout(func, 1000);
或在 boost::asio:
boost::asio::deadline_timer t(io, boost::posix_time::seconds(5));
t.async_wait(&print);
对如何在 C 中实现相同的内容感兴趣。那些。我们设置一个计时器,做一些有用的工作,然后在一段时间后触发一个信号,或者我们以其他方式异步通知。做延迟只是愚蠢的,这是不对的,而是在一段时间后调用它,直到那一刻才暂停工作。至少原理本身,使用什么,eventfd信号或其他东西。
alarm()你是对的,使用用or触发的信号setitimer()。系统调用setitimer()是调用的泛化alarm()。一般来说,每个进程都有三个独立的定时器:
SIGALRM此计时器在到期时向进程发送信号。SIGVTALRM此计时器在到期时向进程发送信号。SIGPROF此计时器在到期时向进程发送信号。在任何给定时间,您只能为每种类型设置一个计时器。如果您设置的计时器尚未到期,则该计时器会简单地重置为新值。