C/UNIX 每 x 毫秒执行一次函数

标签 c unix posix

如何使用 alarm() 或 sleep 每 1000 毫秒执行一次函数?如果函数未在 1000 毫秒内执行或完成,我希望程序执行其他操作。

编辑:添加伪代码

while(true) {
alarm(1000);
execute function;
sleep(1000);
alarm(0);
}

现在如果 alarm(1000) 发出 SIGALRM 信号,这是我可以调用其他函数的地方吗? 我是这类东西的新手,所以我什至不确定我是否正确使用它。

最佳答案

要求有多清晰,即您可以容忍多少抖动?

什么版本的 UNIX?

基本上,如果这是一个硬性截止日期——听起来像一个——你将需要做一些特殊的事情,因为基本的 UNIX 并不是真正的硬实时系统。

我们暂时假设您指的是 Linux。你会想要

  • 使用 nice (2)提高进程优先级
  • 使用细粒度计时器,如 ualarm (3)

这可能会。如果您需要更细粒度或更可预测的计时,那么您可能需要编写一个内核扩展,它可以用内核计时器驱动。 (Solaris 对硬实时有一些改进的支持,但它仍然不是真正的硬实时系统。)

如果您可以使用实时 Linux 或 UNIX,生活会变得容易得多。这是一个 list of some options .这是一个 article you might find usefui.

更新

你还应该看看 nanosleep (2) setitimer (2)。请注意,所有这些都表示间隔至少参数中的间隔。如果你有一个严格的截止日期,你需要等待比实际间隔少一些的时间,然后弄清楚如何处理千毫秒的任何变化。

关于C/UNIX 每 x 毫秒执行一次函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6021955/

相关文章:

c - fork() + exec() 是在 Linux 中执行进程的唯一方法吗?

关闭文件描述符然后使用它

c - 符号的使用 | & &~ 和 ~ 在 capability.h 文件中

c - 我是否使用了正确的格式说明符?

c - c中的多维数组

c - 编写线程安全 UNIX 代码的技巧?

c - 共享内存 - 儿子生成数字,父亲对结果求和 [ UNIX ]

c - POSIX 中未提及的错误

c - "Connection Reset by Peer"如果服务器在 write() 之后立即调用 close()

c - Kaa 不发送事件