当前位置:  开发笔记 > IOS > 正文

当我的Mac进入睡眠状态时,我的应用会发生什么?

如何解决《当我的Mac进入睡眠状态时,我的应用会发生什么?》经验,为你挑选了1个好方法。

当Mac OS X进入休眠状态时,由于关闭笔记本电脑或从Apple菜单中选择"睡眠",它如何暂停正在执行的进程?

我认为非窗口进程只是在任意执行点暂停.对于Cocoa应用程序也是如此,或者操作系统是否等到控制权返回到运行循环调度程序,然后在"已知"位置进入睡眠状态?是否有任何现代操作系统可以做到这一点,或者它通常是否足以安全地暂停应用程序,无论它在做什么?

我很好奇,因为在任何时候允许睡眠都意味着,从应用程序的角度来看,系统时钟可能会突然大幅提升.这是编码时我通常不会考虑的可能性.



1> Mecki..:

如果CPU实际上正在执行您的应用程序的代码,那么您的应用程序将被确切地中断.您的应用程序不断通过任务调度程序获取执行时间,该任务调度程序决定哪个应用程序获得CPU时间,哪个内核以及多长时间.一旦系统真的进入睡眠状态,调度程序不再为您的应用程序提供任何时间,因此它将在那个时刻停止执行,这几乎可以在任何地方发生.但是,内核必须处于干净状态.这意味着如果你只是调用内核(许多libC函数都这样做)并且这个调用不在某个安全点(例如,休眠,等待条件变为真等等)或者可能持有关键内核锁(例如漏斗),内核可以暂停睡眠,直到此调用返回到用户空间或执行达到这样一个安全点,然后它最终从任务调度程序取消您的应用程序.

您可以打开内核端口并注册睡眠/唤醒事件.在这种情况下,当系统想要进入睡眠状态时,您的应用将收到一个事件.你有几种可能性.一个是回复它,系统可能会进展.另一个是暂停睡眠; 但是,Apple表示某些事件最多可以暂停30秒,之后系统将继续,无论您的应用是否喜欢.最后,你可以取消它; 虽然并非所有事件都可以取消.如果系统已经决定它将进入休眠状态,您只能将其暂停最多30秒或立即允许它,您无法取消它.但是,您也可以收听系统询问应用程序的事件,如果可以立即进入睡眠状态,您可以回复"否",从而导致睡眠被取消.

"可以睡觉"和"我正在计划睡觉"之间的区别是:如果应用了省电设置,即,如果用户没有移动鼠标或键入任何内容,则会发送第一个在那里配置的时间.在这种情况下,系统只会询问睡眠是否正常.像Apple的DVD播放器这样的应用程序会说"不",因为很可能用户观看DVD并因此不与计算机交互,仍然没有理由去睡觉.OTOH,如果用户关闭他的Mac Book,不会询问应用程序,系统肯定会进入睡眠状态并通知应用程序,现在最多有30秒的时间对其作出反应.

唤醒事件也可能非常有趣.例如,如果系统唤醒,打开的文件可能无法访问(外部驱动器已拔下)或网络套接字不再工作(网络已更改).因此,您可以在使用它们之前重新初始化某些应用程序部分,并遇到或多或少预期的错误.

关于抓住这些事件的Apple页面.

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有