- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当我使用 setitimer
设置一个短超时,然后在 Linux 2.6 上查询设置值(使用 getitimer
或另一个 setitimer
)。 26系统(Debian 5.0.5),我得到一个比我设置的更高的值:
#include <sys/time.h>
#include <iostream>
int main() {
struct itimerval wanted, got;
wanted.it_value.tv_sec = 0;
wanted.it_value.tv_usec = 7000;
wanted.it_interval.tv_sec = 0;
wanted.it_interval.tv_usec = 0;
setitimer(ITIMER_VIRTUAL, &wanted, NULL);
getitimer(ITIMER_VIRTUAL, &got);
std::cerr << "we said: " << wanted.it_value.tv_usec << "\n"
<< "linux set: " << got.it_value.tv_usec << std::endl;
return 0;
}
返回:
we said: 7000
linux set: 12000
这是有问题的,因为我们使用的是经过一些计算后报告的剩余时间,而且它们也太大了。
这是一个已知问题吗? (谷歌搜索无效。)有人有好的解决方法吗?
最佳答案
在POSIX documentation of the setitimer
function有一张纸条
Implementations may place limitations on the granularity of timer values. For each interval timer, if the requested timer value requires a finer granularity than the implementation supports, the actual timer value shall be rounded up to the next supported value
您系统中的粒度似乎高于 1000 usec(似乎是 6000 usec)并且计时器值被四舍五入。如果您需要这样的精度,计时器粒度就是个问题。
关于linux - Linux 上的 setitimer 汇总?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6856514/
我有以下情况 void foo() { printf("hi\n"); while(1); } int main(void) { struct sigaction temp; t
每个task_struct在 linux 内核中有一个名为“real timer”的字段,它是一个 struct hrtimer (高分辨率定时器)。当我们使用 setitimer 设置定时器时,它将
我有以下代码,我希望它会等待 2 秒,然后循环等待 5 秒。 我没有使用 it_interval 重新启动计时器是有原因的。 #include #include #include #includ
我需要一个高分辨率计时器(至少具有微秒级别的分辨率)并且我发现 setitimer() 可以设置为微秒级别。 struct itimerval t; t.it_interval.tv_sec = 0;
我需要在同一进程中设置多个间隔计时器(相同类型的警报:ITIMER_REAL)。所以我使用 setitimer() 系统调用来创建 3 个闹钟,每个计时器都有单独的结构来保存时间间隔值。当任何计时器到
我想使用以下 C++ 代码等待预定义的时间(在此示例中始终为 2 秒),但仍可被信号中断(这就是我不使用 sleep 的原因): #include #include #include #incl
当我使用 setitimer 设置一个短超时,然后在 Linux 2.6 上查询设置值(使用 getitimer 或另一个 setitimer)。 26系统(Debian 5.0.5),我得到一个比我
我正在编写代码 fork (3、5 的数字,...不定数)。我希望我的程序在指定的时间后结束( parent 可能首先杀死它的 child 然后自己可能通过调用 _exit 这也是 sig-safe)
我通过 sys/time.h 中的 setitimer 函数在我的 C++ 代码中使用了一个计时器。这会将 SIGALRM 信号映射到我的计时器处理程序方法。在此之后我无法使用 sleep 功能。我假
我已经成功制作了一个虚拟计时器,每当时间周期完成时,它就会向处理函数发送信号: 1)使用setitimer创建定时器(周期长度相等)。2)使用sigaction并实现一个函数处理程序s.t sigac
如何使用 setitimer 配置 3 个以上的定时器? linux 手册页说“系统为每个进程提供三个间隔计时器,每个计时器在不同的时域中递减。当任何计时器到期时,都会向进程发送一个信号,并且计时器(
我想在 linux 2.6+ 的多线程进程中使用 setitimer()(或者不太可能,alarm())和支持 NPTL 的 libc。哪个线程将从内核接收 sigalarm (SIGALRM)? 谢
为了研究 ITMER_REAL 和 ITIMER_VIRTUAL 之间的差异,我编写了以下程序。 #include // exit(), EXIT_FAILURE, EXIT_SUCCESS #
我有以下代码,它按预期工作: import signal def printer(signum, frame): print("hi!") signal.signal(signal.SIGAL
我正在尝试使用 setitimer 发送 SIGALRM,它又调用我的处理函数来打印到标准输出。我已经在互联网上搜索了几个小时,但根本没有明确指示应如何使用 setitimer。我尝试过各种组合,但似
首先让我说这里有很多问题。 我论文的其中一项任务要求我编写一个程序来执行一个子程序,如果它的运行时间(不是 wall-time 而是 user+sys )超过特定值或者它的 RAM 消耗是超过另一个指
Linux下PHP通过setitimer中的ITIMER_PROF来实现ini(max_execution_time)和set_time_limit,而不是ITIMER_REAL。通过谷歌,我在 ph
手册说 setitimer 在整个 PROCESS 中共享,SIGPROF 发送到 PROCESS 而不是线程。 但是当我在我的多线程进程中创建计时器时,除非我为进程中的每个线程创建独立的堆栈来处理信
我是一名优秀的程序员,十分优秀!