当主窗口被隐藏时,pthread wait()比预期更长

时间:2014-10-17 02:16:23

标签: c++ multithreading macos pthreads

我们在MacOS上的线程中等待并且主窗口被隐藏时出现问题,即使我们要求等待100毫秒,等待功能也需要10秒。

主程序在Cocoa窗口上运行,另一个线程永久运行,每次迭代等待100ms。 当主窗口可见时,一切正常,但是一旦窗口被隐藏,问题就会在一段时间后开始发生,即等待开始等待几秒钟。我们怀疑系统经常停止唤醒应用程序,因为它不再可见。

我们正在使用pthread_con_wait,但使用usleep或boost :: sleep(可能使用相同的下面)会发生同样的问题。

有没有办法阻止这个或一个标志设置告诉系统我们仍然在运行,我们想要被唤醒?

由于

1 个答案:

答案 0 :(得分:1)

如果是OS v10.9或更高版本,您的应用可能会小睡: Power Efficiency Guide for Mac Apps

文档说,可以使用NSProcessInfo类来阻止它。

  

管理活动

     

该系统具有启发式功能,可以改善电池寿命,性能和性能   应用程序的响应性为用户的利益。您可以   使用以下方法来管理提供提示的活动   您的应用程序有特殊要求的系统:

beginActivityWithOptions:reason:

endActivity:

performActivityWithOptions:reason:usingBlock:
     

为了响应创建活动,系统将禁用某些或   所有的启发式方法,以便您的应用程序可以快速完成   如果用户需要,仍然提供响应行为。

     

...

id activity = [[NSProcessInfo processInfo] ?  
beginActivityWithOptions:NSActivityLatencyCritical  
                  reason:@"Good Reason"];  
// Perform some work.  
[[NSProcessInfo processInfo] endActivity:activity];

请注意,

  

NSActivityLatencyCritical

     

表示活动的标志需要最高的计时器和I / O精度。

     

重要很少有应用程序需要使用此常量。