从C/C++程序中向CFRunLoop添加立即一次任务的最简单方法是什么,即在运行循环再次阻塞之前必须调用的回调。
根据文档,我们有CFRunLoopPerformBlock(),但问题是它使用了块表示法,这需要Objective编译模式。
是否有类似于C/C++程序可用的CFRunLoopPerformBlock(),或者我被迫使用零延迟计时器?
发布于 2015-01-07 00:20:07
块语言特性不需要使用Objective。Clang在C和C++中也支持它。因此,您可以继续使用CFRunLoopPerformBlock()。
如果您仍然在寻找替代方案,并且希望以主线程的run循环(即主run循环)为目标,则可以使用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);https://stackoverflow.com/questions/27808603
复制相似问题