0

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

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

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

4

2 回答 2

1

找到了我真正需要的东西。答案是使用您喜欢的线程机制发送“真正的”主程序以在单独的线程上运行,然后dispatch_main ()int main ()入口点调用。dispatch_main永远不会返回,因此您可能需要在完成后调用exit()另一个线程。

于 2013-06-27T16:50:33.113 回答
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;
}
于 2013-06-27T06:13:30.277 回答