将立即任务添加到`CFRunLoop`的最简单方法?

时间:2015-01-06 22:47:10

标签: c++ c cocoa cfrunloop

从C / C ++程序向CFRunLoop添加立即一次性任务的最简单方法是什么,也就是说,在再次阻塞之前必须由运行循环调用的回调。< / p>

根据文档,我们有CFRunLoopPerformBlock(),但问题在于它使用了需要Objective-C编译模式的块符号。

C / C ++程序是否有与CFRunLoopPerformBlock()类似的东西,或者我被迫使用零延迟计时器?

1 个答案:

答案 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);