我有客观的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/