我有一个移植到 OSX 的 c++ 控制台应用程序,其中一个依赖库依赖于在主队列上运行一些项目。
有没有一种简单的方法可以在保持控制台应用程序的同时适应它(即 int main (argc, argv) 入口点)?如果入口点线程需要为队列执行某种处理循环,我不介意在单独的线程上执行控制台操作,尽管我想要一种方法来告诉它在我完成后退出其他线程。
如果这是不可能的,是否有任何简单的替代方案?理想情况下,即使它以某种方式使用 UI 框架,我仍然会使用普通控制台进行输入/输出。
找到了我真正需要的东西。答案是使用您喜欢的线程机制发送“真正的”主程序以在单独的线程上运行,然后dispatch_main ()
从int main ()
入口点调用。dispatch_main
永远不会返回,因此您可能需要在完成后调用exit()
另一个线程。
我无法确切理解“在主队列上运行项目”是什么意思。看起来像是与 Foundation/Carbon 框架相关的操作。
Carbon 框架提供 C 链接,但我对此知之甚少。如果我是你,我会使用 Objective-C 和 Foundation 框架方式。使用 Objective-C++ (.mm),您可以使用几乎所有 C++ 功能。
在 Objective-C 代码中,运行主队列很简单,如下所示:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSRunLoop* mainRL = [NSRunLoop mainRunLoop];
// run only 10 seconds
for (int i=0; i<10; ++i)
{
NSAutoreleasePool* innerPool = [[NSAutoreleasePool alloc] init];
[mainRL runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1.0]];
[innerPool release];
}
[pool release];
return 0;
}