2017-06-15 81 views
0

我目前有一些代码需要运行CFRunLoopRun()如何在特定的时间内运行CFRunLoop(),然后停止?

无限期运行。我想用一些只能运行一定时间的东西来代替它,比如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 

回答

2

您正在使用自定义模式。看起来你只是为了这一个电话而做出来的。这表明在该模式下没有计划输入源。如果没有输入源,所有运行循环运行函数立即退出。

CFRunLoopRunInMode()实际上返回一个值,指出它退出的原因。你应该检查一下。

CFRunLoopRun()的区别在于它在默认模式(kCFRunLoopDefaultMode)下运行运行循环,而不是您的自定义模式。该模式几乎肯定会有输入源(至少假设这是主线程,因此也是主运行循环)。

所以,你可以这样做:

CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10.0, FALSE); 

所有这一切都表示,运行在固定时间段的运行循环很少是正确的做法。你究竟在努力实现什么?是什么让你得出结论:你需要运行循环10秒?为什么不回到正常的事件循环,并使用计时器在10秒内完成一些工作?

相关问题