- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我尝试通过使用 clock_nanosleep 的这段代码休眠半秒钟,但我无法让它工作。我的代码总是立即执行,就好像 sleep 不存在一样。我做错了什么?
while (true)
{
/* CRITICAL SECTION BEGIN */
pthread_mutex_lock(&lock);
ret = clock_gettime(CLOCK_MONOTONIC, &now);
if (ret) {
perror ("clock_gettime");
exit(1);
}
for (i = 0; i < some_value ; i++){
/* Do some stuff */
}
/* Update sleep time */
now.tv_nsec += 500000000;
pthread_mutex_unlock(&lock);
/* CRITICAL SECTION END */
clock_gettime(CLOCK_MONOTONIC, &debug);
printf("Clockgoal - now: : %lu\n", now.tv_nsec - debug.tv_nsec);
clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &now, NULL);
}
这是作为 pthread 运行的,但它根本不休眠。 printf 输出如下所示:
Done Updating Time!
Clockgoal - now: : 499997443
Done Updating Time!
Clockgoal - now: : 499997441
我做错了什么? (我需要一些特定的内核配置来允许这种 sleep 吗?我在一个非常小的 gentoo 上运行,所以也许我必须检查一些配置选项?
总的来说,我想实现的是这个线程对一些值做一些更新,然后休眠半秒,包括它正在工作的时间。如果我做错了,并且有更好的选择,请告诉我,因为我不一定要为此使用 clock_nanosleep,它似乎是合适的解决方案。
最佳答案
当您将 0.5 秒添加到 now
时,您需要处理溢出。
改变:
now.tv_nsec += 500000000;
到:
now.tv_nsec += 500000000L; // add 0.5s
if (now.tv_nsec >= 1000000000L) // if ns field overflows
{
now.tv_nsec -= 1000000000L; // handle "carry" to seconds field
now.tv_sec++;
}
关于clock_nanosleep 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36845753/
我尝试通过使用 clock_nanosleep 的这段代码休眠半秒钟,但我无法让它工作。我的代码总是立即执行,就好像 sleep 不存在一样。我做错了什么? while (true) {
我对 clock_nanosleep 有一些困难,但一步一步来: 我的程序对 SIGUSR1 信号使用react 我的程序应该无限循环,直到从 clock_nanosleep 获得 SIGALRM。
在请求中向clock_nanosleep提交相同的对象并保留参数是否安全? do { ret = clock_nanosleep(CLOCK_MONOTONIC, 0, &t, &t); }
当前 clock_nanosleep 在 Debian Jessie 上使用 CLOCK_MONOTONIC_RAW 返回 EOPNOTSUPP。 如何解决此问题并补偿可能应用于计时器循环中的 CLO
我想使用 clock_nanosleep 等待 1 微秒。据我所知,我必须给出一个绝对时间作为输入。在这种情况下,以下代码可以吗? deadline.tv_sec = 0; deadline.tv_n
我想用第一代 RPI 的 gpio 输出生成方波信号。 为此,我首先想使用 wiringPi . 代码语言是固定的,应该是C或C++。 根据 wiringPi 的闪烁示例文档,解决方案应该很简单: #
我正在 Xenomai 中测试 POSIX 皮肤。我正在尝试从 Raspberry Pi 上的一些 GPIO 读取和写入,当我执行程序时,上下文切换的次数越来越多(在/proc/xenomai/sta
通常CLOCK_MONOTONIC_RAW用于获取不受NTP或adjtime()影响的时钟。但是 clock_nanosleep() 不支持 CLOCK_MONOTONIC_RAW 并且无论如何尝试使
我是 Linux 新手。我正在尝试使用 clock_nanosleep 实现一个简单的任务。问题是,clock_nanosleep 在被信号中断后没有将 errno 设置为 EINTR。我试过重置 S
我正在尝试每 10 毫秒定期运行一个任务。在执行任务之前,我想检查 clock_nanosleep 的一致性。我取了 10 个值来检查 clock_nanosleep 正在休眠的时间,但它们在 19-
这两个功能哪个更好 #include int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp,
我是一名优秀的程序员,十分优秀!