问题标签 [setitimer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 如何让信号处理程序打印时间过去?
我正在编写一个具有 sigaction 处理程序的 C 程序。如果 SIGALRM 在一段时间内没有出现,它也有一个 itimerval。
处理程序应
- 打印完成的无限循环总数
- 打印经过的时间
- 退出(1);
我注意到信号处理程序不采用自定义参数,所以我有一个全局循环计数器。
我的问题是:我如何获得经过的时间?我可以从计时器中获得这些信息吗?我不完全了解计时器的用法。
此外,代码在终止之前的 fprintf 调用之后打印 1 个额外的整数(来自循环)。如何解决?
代码:
c - 来自 setitimer 的计时器值
我无法理解由setitimer
. 我有以下代码
如您所见,我正在尝试“暂停”计时器并立即恢复它。按原样运行代码会生成像这样的输出行
没有别的了。在第二次调用setitimer
循环内部之后,计时器结构不应该保存当前计时器的值吗?如果是这样,我怎么看不到timer.it_value
减少的值?
另一个奇怪的事情是,当删除busy_wait(10000000);
循环中的行时,我看到不同的递增值timer.it_value
,例如
这些数字是什么意思?根据setitimer
手册
计时器从 it_value 递减到零,生成一个信号,然后重置为 it_interval。
但这与我在这里看到的结果相反。
此外,为什么timer.it_interval.tv_usec
有价值4000
?不应该2
和我设置的一样吗?
c - 如何使用“setitimer()”函数调用设置多个警报
我需要在同一进程中设置多个间隔计时器(相同类型的警报:ITIMER_REAL)。所以我使用setitimer()系统调用来创建 3 个警报,每个计时器都有单独的结构来保存时间间隔值。当任何计时器到期时,它都会向调用进程发出信号 SIGALRM,但我找不到三个中的哪个计时器发出了信号,我什至不知道所有计时器是否都在运行。有什么办法可以找到哪个计时器发出了信号……谢谢。
c - 间隔计时器未在指定时间间隔触发信号
无论 timer_handler 函数的执行时间如何,我想每 2 秒调用一次 timer_handler 函数这是我的代码
根据上面的代码,它应该timer expired 1 times 26 signum
每两秒打印一次,但它每 3 秒打印一次,其中包括睡眠时间,所以我想每 2 秒调用一次该函数。我不知道我在哪里做错了如果任何其他图书馆能够做到这一点,请告诉我谢谢
c - 了解 struct itimerval 字段 tv_usec
嗨,我正在研究这段代码:
有了这个设置,一切都很好,我得到了这个输出
如果我尝试更改代码注释timer.it_interval.tv_usec
和 timer.it_interval.tv_usec
设置两者 timer.it_value.tv_sec
和timer.it_value.tv_sec
等于,例如,3 它不会做他的工作。
但是,如果我维护这样的明确声明,tv_usec
它会起作用:
为什么我tv_usec
对这两个字段的显式声明有约束力?
c - 使用 setitimer() 和 ITIMER_VIRTUAL 时,是什么导致虚拟运行时间变慢?
为了研究和我之间的差异ITMER_REAL
,ITIMER_VIRTUAL
我整理了以下程序。
从main()
我打电话fibonacci_fast()
或fibonacci_slow()
。
正如预期的那样,在使用ITMER_REAL
时,在调用fibonacci_fast()
或fibonacci_slow()
从main()
.
当使用ITIMER_VIRTUAL
和main()
调用fibonacci_fast()
计时器时,每个计时器滴答之间的挂钟时间真的很长,但如果main()
调用fibonacci_slow()
每个计时器滴答之间的挂钟时间要小得多。
我想了解为什么fibonacci_fast()
虚拟运行时比fibonacci_slow()
. fibonacci_fast()
与使用相比,CPU 调度程序是否给进程提供了更少的 CPU 时间fibonacci_slow()
?如果是,为什么?如果不是,还有什么可以解释这种差异?
c - 如何在 C 中使用带有 SIGALRM 的 setitimer
我正在尝试使用 setitimer 发送一个 SIGALRM,然后调用我的处理程序函数打印到标准输出。我已经在互联网上搜索了好几个小时,但没有明确说明应该如何使用 setitimer。我尝试了各种组合,但似乎都不起作用。在我的代码中,我使用的是套接字和 pthread,但我认为它与问题并不真正相关,因为我试图通过一个信号设置警报,无论如何这都会停止所有线程,所以我将保留该代码简单。
它应该每秒简单地打印到终端,但事实并非如此。谁能给我任何建议?
c - setitimer() 调用是否由子代继承
我正在编写代码分叉(3、5、... 不定数)。我希望我的程序在指定的时间后结束(父母首先杀死它的孩子,然后可能通过调用 _exit 来杀死自己,这也是 sig-safe)。我的意思是在信号处理程序中,我通过 kill() 杀死所有孩子,然后为所有孩子调用 waitpid(),因为两者都是异步信号安全函数。为此,我setitimer(ITIMER_REAL, &timer, NULL
在分叉之前使用。
那么它是由分叉的孩子继承的吗?
如果它不是继承的,你能提供一个来源吗?
如果它是继承的,那么所有的孩子都会在时间结束后结束吗?另外,其实我不想要这个案子。