Mac OS X:是否可以将非主线程灌输为进程的"The Main Thread"?
Mac OS X: is it possible to imbue a non-main thread to become "The Main Thread" of a process?
我在Mac OS X(10.6.7)下遇到了一个与GUI/线程相关的问题。我使用的是wxWidgets框架(版本2.9.1),在我的例子中它依赖于Cocoa。应用程序设计如下:
- 线程#1(也称为"主线程"):进入Main(),解析开关,如果需要,启动另一个线程(使用POSIX基元)
- thread#2(也称为"GUI线程"):使用wxEntry初始化wxWidgets并显示GUI
像大多数其他GUI框架一样,Cocoa不是线程安全的,所以我们确保从线程#2中执行所有GUI调用,并在需要时传递消息。然而,在这种特殊的情况下,在初始化过程中,Cocoa的内部会提出一个断言(更准确地说是NSUndoManager),本质上说"在主线程之外使用我是不安全的"。尽管线程#2是主线程,但就任何与GUI相关的内容而言。
NSUndoManager必须有一种方法来发现它在主线程之外运行(可能使用NSThread::isMainThread())。所以我的问题是:有可能就此欺骗NSUndoManager(以及Cocoa)吗?更好的是,将线程#2声明为"主线程",而将线程#1声明为次要线程?基本上,我需要一个API调用,比如"使调用线程成为主线程"。无文档的魔法和ObjectiveC++是不错的,只要它也能在OSX10.5上运行。
p.p.现在的代码在Windows/Linux/MacOSX+Carbon下完美工作。此外,重新设计它以改变线程结构将是一个巨大的痛苦。
好吧,所以根据您的评论:您基本上无法逃脱代码的重构。大多数GUI系统都使用主线程,并为自己处理事件循环。但是,如果您说GUI是可选的,也许最好将您的应用程序分为两部分——工作程序和GUI。GUI可以通过多种方式与工作人员通信,具体取决于平台/特定需求。
相关文章:
- boost::进程间消息队列引发错误
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 是否可以通过C++扩展强制多个python进程共享同一内存
- IPC使用多个管道和分支进程来运行Python程序
- 异常属于C++中的线程还是进程
- WMI检测进程创建事件-c++
- c++多进程编写一个唯一的文件
- 如何在C++中将函数发送到另一个进程
- 在Qt Creator中,如何在连接到正在运行的进程后查看控制台输出
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- 终止 QProcess 不会终止子进程
- 将返回值从 exe 传递到 bat,并将其传递给 C# 中的进程
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- Windows 进程间同步类似事件?
- Doees the 'this' 指针参与虚函数的多态行为
- 在挂钩启动新线程时解除挂钩进程
- pclose() 不会给我进程退出代码
- 运行代码时,c++ 会终止进程
- 可以读入进程内存的最大块大小是多少?
- Mac OS X:是否可以将非主线程灌输为进程的"The Main Thread"?