我有客观的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之前,现在会循环,但不会收到睡眠通知。
顺便说一句,如果我从主线程调用它,我会收到睡眠通知。

最佳答案

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

“当前线程的运行循环以默认模式运行(请参阅默认运行循环模式),直到使用CFRunLoopStop停止运行循环或从默认运行循环模式中删除所有源和计时器为止。”

从您的评论看来,您是在要求新线程中的运行循环运行,但实际上并没有任何作用。

关于objective-c - CFRunLoopRun立即在NSThread中返回,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27620048/

10-10 09:03