Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 如何在一定时间内运行CFRunLoop(),然后停止?_Objective C - Fatal编程技术网

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秒内完成一些工作