gpt4 book ai didi

objective-c - 当应用程序不活动时,主线程在 Cocoa 应用程序中停止正常运行一段时间

转载 作者:行者123 更新时间:2023-12-03 17:11:33 28 4
gpt4 key购买 nike

我是 OS X Cocoa 的新手,正在创建一个需要连续运行多个 AppleScripts 同时仍保留在主线程上的应用程序,因为从任何其他线程运行 AppleScripts 都不是线程安全的线程。

<小时/>

我面临的问题是主线程在应用程序变为非事件状态几秒钟后停止正常运行,因此不执行任何内容当应用程序处于非事件状态时,它会在主线程上运行几分钟。每当应用程序再次变为事件状态时,主线程就会再次开始正常运行,直到应用程序再次变为非事件状态几秒钟后。

我相信这个问题是由 Apple 在 OS X 上节省电池生命周期和 CPU 使用率的新方法引起的,不幸的是我无法找到解决这个问题的方法。

即使在应用程序处于非事件状态后,我有什么方法可以保持主线程运行吗?

<小时/>

其他详细信息

我正在 GCD 中运行“更新循环”的其余部分,并重组了我的代码以使用此方法从主线程运行 AppleScripts

-(void)runAppleScript {
[informationDictionary setObject:[[getTrackIDScript executeAndReturnError:nil] stringValue] forKey:@"currentTrackID"];
}

正在以这种方式运行:

[self PerformSelectorOnMainThread:@selector(runAppleScript) withObject:nil waitUntilDone:TRUE];

此方法在主线程中运行 AppleScript 方法,并将 AppleScript 的返回值保存在字典中,然后在方法完成运行后使用以下代码获取该值

NSString * trackID = [informationDictionary objectForKey:@"currentTrackID"];

最佳答案

你可以看看NSProcessInfo

– performActivityWithOptions:reason:usingBlock:

方法(或等效但不太简单的beginActivityWithOptions:reason:)。

您可以传递 NSActivityUserInitiated 作为选项参数。

这将在 block 执行时禁用应用程序小睡。

另请观看关于 Writing energy efficient code 的非常有趣的 WWDC 视频.

关于objective-c - 当应用程序不活动时,主线程在 Cocoa 应用程序中停止正常运行一段时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24470663/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com