将即时任务添加到“CFRunLoop”的最简单方法?
Easiest way to add immediate task to a `CFRunLoop`?
从 C/C++ 程序向 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);
从 C/C++ 程序向 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);