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

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

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

最佳答案

块语言功能不需要使用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);

10-08 07:36