从 C/C++ 程序中向 CFRunLoop
添加即时一次性任务的最简单方法是什么,即在运行循环阻塞之前必须调用的回调再次。
根据文档,我们有 CFRunLoopPerformBlock()
,但它的问题是它使用需要 Objective-C 编译模式的 block 表示法。
C/C++ 程序是否有类似于 CFRunLoopPerformBlock()
的东西,或者我是否被迫使用零延迟计时器?
最佳答案
block 语言功能不需要使用 Objective-C。 Clang 在 C 和 C++ 中也支持它。因此,您可以继续使用 CFRunLoopPerformBlock()
。
如果您仍在寻找替代方案并且希望以主线程的运行循环(即主运行循环)为目标,您可以使用 dispatch_async_f()
。尽管在使用 GCD 时最常见的是使用基于 block 的函数,但带有 _f
后缀的函数采用函数指针。
static void my_task_function(void *context)
{
// ...
}
...
dispatch_async_f(dispatch_get_main_queue(), any_pointer_you_like, my_task_function);
关于c++ - 将即时任务添加到 `CFRunLoop` 的最简单方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27808603/