其他分享
首页 > 其他分享> > c – 什么可以使macOS X 10.9上的纳米睡眠漂移10秒

c – 什么可以使macOS X 10.9上的纳米睡眠漂移10秒

作者:互联网

我的程序的一部分需要睡眠10毫秒.通常我会使用boost lib,但它有时会睡眠10010毫秒,所以我尝试更换

boost::this_thread::sleep_for(boost::chrono::milliseconds(read_delay_ms));

struct timespec a;
a.tv_sec  = 0;
a.tv_nsec = read_delay_ms * 1000000;
int rc = nanosleep( &a, NULL );

毫不奇怪,nanosleep的使用有时也会睡眠10010毫秒(sleep_for是使用mac上的nanosleep()实现的).

我的程序很复杂,所以我无法创建一个说明问题的小例子,我正在研究这个问题.以下是一些亮点:

>这是一个用C语言编写的python扩展,使用boost :: python作为桥接器
>使用boost :: asio将boost :: threads用于异步任务

该问题仅在mac OS X 10.9上出现.它在Mac OS X 10.8及以下版本中没有出现,在linux,win,iOS和android上都看不到.

为了在我的代码,升级lib或sys函数中找到错误,任何帮助或建议都是值得欢迎的.

解决方法:

App Nap很可能就是这个原因.它是在10.9中引入的,并且因引起这样的惊喜而闻名.

NSProcessInfo有三种临时禁用App Nap的方法:beginActivityWithOptions:reason:,endActivity:,performActivityWithOptions:reason:block:.

您还可以通过将boolean YES写入应用程序域的NSAppSleepDisabled用户默认值来禁用它.

标签:c,macos,boost,osx-mavericks
来源: https://codeday.me/bug/20190830/1771675.html