Objective c 如何在一定时间内运行CFRunLoop(),然后停止?
我目前有一些代码需要运行Objective c 如何在一定时间内运行CFRunLoop(),然后停止?,objective-c,Objective C,我目前有一些代码需要运行CFRunLoopRun() 这是无限期的。我想用只运行一定时间的东西来代替它,比如说30秒 我尝试了CFRunLoopRunInMode(),但它立即退出 CFRunLoopRun(); // Works but never stops, I need to stop after 30s CFStringRef mode = (__bridge CFStringRef)@"mode"; CFTimeInterval timeInterval = 10.0; CFRunL
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
您正在使用自定义模式。看来你只是在弥补这一个电话。这表明在该模式下没有计划的输入源。如果没有输入源,所有运行循环运行函数都会立即退出
CFRunLoopRunInMode()
实际上返回一个值,指示它退出的原因。你应该检查一下
与CFRunLoopRun()
的区别在于,它以默认模式(kCFRunLoopDefaultMode
)而不是自定义模式运行运行循环。该模式几乎肯定有调度的输入源(至少假设这是主线程,因此是主运行循环)
所以,你可以这样做:
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10.0, FALSE);
尽管如此,在固定的时间段内运行运行循环很少是正确的方法。你到底想达到什么目的?是什么导致您得出结论,您需要运行run循环10秒?为什么不直接返回正常事件循环并使用计时器在10秒内完成一些工作?您使用的是自定义模式。看来你只是在弥补这一个电话。这表明在该模式下没有计划的输入源。如果没有输入源,所有运行循环运行函数都会立即退出
CFRunLoopRunInMode()
实际上返回一个值,指示它退出的原因。你应该检查一下
与CFRunLoopRun()
的区别在于,它以默认模式(kCFRunLoopDefaultMode
)而不是自定义模式运行运行循环。该模式几乎肯定有调度的输入源(至少假设这是主线程,因此是主运行循环)
所以,你可以这样做:
CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10.0, FALSE);
尽管如此,在固定的时间段内运行运行循环很少是正确的方法。你到底想达到什么目的?是什么导致您得出结论,您需要运行run循环10秒?为什么不直接返回到正常事件循环并使用计时器在10秒内完成一些工作