0

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

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

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

4

1 回答 1

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);
于 2015-01-07T00:20:07.287 回答