从 C/C++ 程序向 a 添加即时一次性任务的最简单方法是什么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);