anr*_*eff 13 c++ macos cocoa multithreading wxwidgets
我在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上运行.
PP代码,就像现在一样,在Windows/Linux/MacOSX + Carbon下完美运行.此外,重新设计它以改变线程结构将是一个巨大的痛苦.
好的,根据您的评论:您基本上无法逃脱代码的重构。大多数 GUI 系统使用主线程并自行处理事件循环。但如果你说 GUI 是可选的,也许最好将你的应用程序分成两部分——工作程序和 GUI。GUI 可以通过多种方式与工作人员通信,具体取决于平台/特定需求。
| 归档时间: |
|
| 查看次数: |
1390 次 |
| 最近记录: |