CFRunLoopRun立即在NSThread中返回

时间:2014-12-23 12:06:40

标签: objective-c macos cocoa notifications

我有客观的C代码,我从c ++应用程序调用。 在那个客观的C代码中,当我刚刚运行CFRunLoopRun()时,它会在那里停止并循环,但是当我创建新的

 NSThread* evtThread = [ [NSThread alloc] initWithTarget:self
                                               selector:@selector( saySomething )
                                                 object:nil ];

[ evtThread start ];

并在那里运行CFRunLoopRun(),它会立即返回。

怎么了?

原来我需要一些输入源,所以我想在非主线程中运行该循环并在那里收到通知,我该怎么做?

添加了

 NSRunLoop *q = [NSRunLoop currentRunLoop];
 [q addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];

在CFRunLoopRun之前,现在它循环但没有得到睡眠通知。 顺便说一句,如果我从主线程调用它,我会收到睡眠通知。

1 个答案:

答案 0 :(得分:2)

请注意CFRunLoopRun()的文档的最后一句:

"当前线程的运行循环以默认模式运行(请参阅默认运行循环模式),直到使用CFRunLoopStop停止运行循环或从默认运行循环模式中删除所有源和定时器。&#34 ;

从您的评论中可以看出,您要求新线程中的运行循环运行,但实际上没有任何事情要做。