c++ - 将即时任务添加到 `CFRunLoop` 的最简单方法?

标签 c++ c cocoa cfrunloop

从 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/

相关文章:

c - 直接访问物理地址时是否需要使用 volatile 关键字?

c++ - 促进在现有 C 实现中使用 C++

c - 如何用kmalloc进行数据结构对齐?

objective-c - 验证字体和颜色 NSToolbarItem 项

objective-c - 关于 NSString 的一些初学者问题

c++ - 在存在新的初始化序列的情况下,运算符重载决议如何工作?

c++ - 为什么我的代码没有使用类型转换进行编译?

c++ - 为什么标准允许我在没有析构函数的情况下自由存储分配类?

C++ 派生类 - 从父类调用虚函数?

objective-c - objectForKey 和 valueForKey 的区别?