gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:22:57 28 4
gpt4 key购买 nike

如何使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com