来自控制台应用程序的OSX主队列

时间:2013-06-26 19:50:20

标签: c++ macos console

我有一个移植到OSX的c ++控制台应用程序,其中一个依赖库依赖于在主队列上运行一些项目。

在保留控制台应用程序(即int main(argc,argv)入口点)时是否有一种简单的方法可以容纳它?如果入口点线程需要为队列执行某种处理循环,我不介意在单独的线程上执行控制台操作,虽然我想要一种方法告诉它在我完成时退出其他线程。

如果那是不可能的,有没有简单的替代方案?理想情况下,即使它以某种方式使用UI框架,我仍将使用普通控制台进行输入/输出。

2 个答案:

答案 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;
}
相关问题