将即时任务添加到“CFRunLoop”的最简单方法?

Easiest way to add immediate task to a `CFRunLoop`?

从 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);