我有客观的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之前,现在它循环但没有得到睡眠通知。 顺便说一句,如果我从主线程调用它,我会收到睡眠通知。
答案 0 :(得分:2)
请注意CFRunLoopRun()
的文档的最后一句:
"当前线程的运行循环以默认模式运行(请参阅默认运行循环模式),直到使用CFRunLoopStop停止运行循环或从默认运行循环模式中删除所有源和定时器。&#34 ;
从您的评论中可以看出,您要求新线程中的运行循环运行,但实际上没有任何事情要做。