我在Mac OS X(10.6.7)下遇到了与GUI /线程相关的问题。 我正在使用wxWidgets框架(版本2.9.1),在我的情况下它依赖于Cocoa。应用程序设计是这样的:
与大多数其他GUI框架一样,Cocoa不是线程安全的,因此我们确保从线程#2内部执行所有GUI调用,并在需要时传递消息。 然而,在这种特殊情况下,在初始化期间(从NSUndoManager更加精确)从Cocoa的内部提出断言,实质上说“在主线程之外使用我是不安全的”。即使线程#2是 主线程,只要涉及与GUI相关的任何内容。
好吧,NSUndoManager必须有办法找出它正在运行主线程(可能使用NSThread :: isMainThread())。所以我的问题是:是否有可能欺骗NSUndoManager(以及一般的Cocoa)?更好的是,声明线程#2是“主线程”,线程#1成为次要线程?基本上,我需要一个API调用,如“让调用线程成为主要线程”。没有文档的魔法和Objective C ++就可以了,只要它也适用于OS X 10.5。
P.P。现在,代码在Windows / Linux / MacOSX + Carbon下完美运行。此外,重新设计它以改变线程结构将是一个巨大的痛苦。
答案 0 :(得分:0)
好的,所以根据你的评论:你基本上不会逃避你的代码的重构。大多数GUI系统使用主线程并为自己处理事件循环。但是如果你说GUI是可选的,也许最好将你的应用程序分成两个 - 工作者和GUI。 GUI可以通过多种方式与工作人员进行通信,具体取决于平台/特定需求。