问题标签 [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.

0 投票
1 回答
563 浏览

c - 如何让信号处理程序打印时间过去?

我正在编写一个具有 sigaction 处理程序的 C 程序。如果 SIGALRM 在一段时间内没有出现,它也有一个 itimerval。

处理程序应

  1. 打印完成的无限循环总数
  2. 打印经过的时间
  3. 退出(1);

我注意到信号处理程序不采用自定义参数,所以我有一个全局循环计数器。
我的问题是:我如何获得经过的时间?我可以从计时器中获得这些信息吗?我不完全了解计时器的用法。
此外,代码在终止之前的 fprintf 调用之后打印 1 个额外的整数(来自循环)。如何解决?

代码:

0 投票
0 回答
322 浏览

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和我设置的一样吗?

0 投票
2 回答
2276 浏览

c - 如何使用“setitimer()”函数调用设置多个警报

我需要在同一进程中设置多个间隔计时器(相同类型的警报:ITIMER_REAL)。所以我使用setitimer()系统调用来创建 3 个警报,每个计时器都有单独的结构来保存时间间隔值。当任何计时器到期时,它都会向调用进程发出信号 SIGALRM,但我找不到三个中的哪个计时器发出了信号,我什至不知道所有计时器是否都在运行。有什么办法可以找到哪个计时器发出了信号……谢谢。

0 投票
2 回答
608 浏览

c - 间隔计时器未在指定时间间隔触发信号

无论 timer_handler 函数的执行时间如何,我想每 2 秒调用一次 timer_handler 函数这是我的代码

根据上面的代码,它应该timer expired 1 times 26 signum每两秒打印一次,但它每 3 秒打印一次,其中包括睡眠时间,所以我想每 2 秒调用一次该函数。我不知道我在哪里做错了如果任何其他图书馆能够做到这一点,请告诉我谢谢

0 投票
1 回答
2750 浏览

c - 了解 struct itimerval 字段 tv_usec

嗨,我正在研究这段代码:

有了这个设置,一切都很好,我得到了这个输出

如果我尝试更改代码注释timer.it_interval.tv_usectimer.it_interval.tv_usec设置两者 timer.it_value.tv_sectimer.it_value.tv_sec等于,例如,3 它不会做他的工作。

但是,如果我维护这样的明确声明,tv_usec它会起作用:

为什么我tv_usec对这两个字段的显式声明有约束力?

0 投票
1 回答
338 浏览

c - 使用 setitimer() 和 ITIMER_VIRTUAL 时,是什么导致虚拟运行时间变慢?

为了研究和我之间的差异ITMER_REALITIMER_VIRTUAL我整理了以下程序。

main()我打电话fibonacci_fast()fibonacci_slow()

正如预期的那样,在使用ITMER_REAL时,在调用fibonacci_fast()fibonacci_slow()main().

当使用ITIMER_VIRTUALmain()调用fibonacci_fast()计时器时,每个计时器滴答之间的挂钟时间真的很长,但如果main()调用fibonacci_slow()每个计时器滴答之间的挂钟时间要小得多。

我想了解为什么fibonacci_fast()虚拟运行时比fibonacci_slow(). fibonacci_fast()与使用相比,CPU 调度程序是否给进程提供了更少的 CPU 时间fibonacci_slow()?如果是,为什么?如果不是,还有什么可以解释这种差异?

0 投票
1 回答
2108 浏览

c - 如何在 C 中使用带有 SIGALRM 的 setitimer

我正在尝试使用 setitimer 发送一个 SIGALRM,然后调用我的处理程序函数打印到标准输出。我已经在互联网上搜索了好几个小时,但没有明确说明应该如何使用 setitimer。我尝试了各种组合,但似乎都不起作用。在我的代码中,我使用的是套接字和 pthread,但我认为它与问题并不真正相关,因为我试图通过一个信号设置警报,无论如何这都会停止所有线程,所以我将保留该代码简单。

它应该每秒简单地打印到终端,但事实并非如此。谁能给我任何建议?

0 投票
1 回答
183 浏览

c - setitimer() 调用是否由子代继承

我正在编写代码分叉(3、5、... 不定数)。我希望我的程序在指定的时间后结束(父母首先杀死它的孩子,然后可能通过调用 _exit 来杀死自己,这也是 sig-safe)。我的意思是在信号处理程序中,我通过 kill() 杀死所有孩子,然后为所有孩子调用 waitpid(),因为两者都是异步信号安全函数。为此,我setitimer(ITIMER_REAL, &timer, NULL在分叉之前使用。

那么它是由分叉的孩子继承的吗?

如果它不是继承的,你能提供一个来源吗?

如果它是继承的,那么所有的孩子都会在时间结束后结束吗?另外,其实我不想要这个案子。