gpt4 book ai didi

objective-c - 停止 NSApplication 主事件循环

转载 作者:行者123 更新时间:2023-12-03 16:34:55 25 4
gpt4 key购买 nike

我有一个由以下单个 .m 文件组成的应用程序:

#import <Cocoa/Cocoa.h>

int main(int argc, char* argv[]) {
[[[NSThread alloc] initWithBlock: ^{
sleep(2);
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"Stop");
[[NSApplication sharedApplication] stop:nil];
});
}] start];
[[NSApplication sharedApplication] run];
NSLog(@"Run finished");
return 0;
}

根据the developer documentation , stop 应该停止主循环 (run),但它没有(至少在 OS X 10.12 和 10.13 上没有)。还有terminate ,但这太快退出程序了。我还尝试设置一个实现 applicationShouldTerminateNSApplicationDelegate,但这从未被调用。

如何确保主运行循环(干净地)退出?

注意:共享应用程序主循环是必要的,因为 UI 工作正在其他地方完成。更具体地说,这在Go WDE中给出了问题。 UI 库,它使用 Cocoa 为 Go 应用程序提供一个窗口。

最佳答案

documentation for -stop:说:

[C]alling this method from a timer or run-loop observer routine would not stop the run loop because they do not result in the posting of an NSEvent object.

调度到主队列的 block 类似,因为它不发布事件。您可以尝试在调用 -stop: 后发布 NSEventTypeApplicationDefined 事件。

关于objective-c - 停止 NSApplication 主事件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48041279/

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