我有一个移植到OSX的c ++控制台应用程序,其中一个依赖库依赖于在主队列上运行一些项目。
在保留控制台应用程序(即int main(argc,argv)入口点)时是否有一种简单的方法可以容纳它?如果入口点线程需要为队列执行某种处理循环,我不介意在单独的线程上执行控制台操作,虽然我想要一种方法告诉它在我完成时退出其他线程。
如果那是不可能的,有没有简单的替代方案?理想情况下,即使它以某种方式使用UI框架,我仍将使用普通控制台进行输入/输出。
答案 0 :(得分:1)
找到我真正需要的东西。答案是发送“真正的”主程序,使用您首选的线程机制在单独的线程上运行,然后从dispatch_main ()
入口点调用int main ()
。 dispatch_main
永远不会返回,因此您可能需要在其他线程上调用exit()
。
答案 1 :(得分:0)
我无法准确理解“在主队列中运行项目”的含义。这似乎与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;
}