从C / C ++程序向CFRunLoop
添加立即一次性任务的最简单方法是什么,也就是说,在再次阻塞之前必须由运行循环调用的回调。< / p>
根据文档,我们有CFRunLoopPerformBlock()
,但问题在于它使用了需要Objective-C编译模式的块符号。
C / C ++程序是否有与CFRunLoopPerformBlock()
类似的东西,或者我被迫使用零延迟计时器?
答案 0 :(得分:1)
块语言功能不需要使用Objective-C。 Clang也在C和C ++中支持它。因此,您可以继续使用CFRunLoopPerformBlock()
。
如果您仍在寻找替代方案并且希望定位主线程的运行循环(即主运行循环),则可以使用dispatch_async_f()
。虽然在使用GCD时使用基于块的函数是最常见的,但带有_f
后缀的函数会使用函数指针。
static void my_task_function(void *context)
{
// ...
}
...
dispatch_async_f(dispatch_get_main_queue(), any_pointer_you_like, my_task_function);