我目前有一些代码需要运行CFRunLoopRun()
。
这无限期地运行。我想用只运行一段时间的东西来代替它,比如30秒。
我尝试了CFRunLoopRunInMode()
,但它会立即退出。
CFRunLoopRun(); // Works but never stops, I need to stop after 30s
CFStringRef mode = (__bridge CFStringRef)@"mode";
CFTimeInterval timeInterval = 10.0;
CFRunLoopRunInMode(mode, timeInterval, FALSE); // Doesn't work, syntax is wrong?, stops immediately
答案 0 :(得分:2)
您正在使用自定义模式。看起来你只是在为这一个电话做好准备。这表明在该模式下没有安排输入源。如果没有输入源,则所有运行循环运行函数立即退出。
CFRunLoopRunInMode()
实际上返回一个值,表示它退出的原因。你应该检查一下。
与CFRunLoopRun()
的区别在于它以默认模式(kCFRunLoopDefaultMode
)运行运行循环,而不是您的自定义模式。该模式几乎肯定会安排输入源(至少,假设这是主线程,因此主运行循环)。
所以,你可以这样做:
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10.0, FALSE);
所有这些都说,在一段固定时间内运行运行循环很少是正确的方法。你究竟想要实现什么目标?是什么让你得出结论,你需要运行运行循环10秒?为什么不回到正常的事件循环并使用计时器在10秒内完成一些工作?