Какой самый простой способ добавить немедленную одноразовую задачу в CFRunLoop
из программы на C / C ++, то есть обратного вызова, который должен быть вызван циклом выполнения, прежде чем он снова блокируется.
Согласно документации, мы имеем CFRunLoopPerformBlock()
Но проблема в том, что он использует блочную нотацию, которая требует режима компиляции Objective-C.
Есть ли что-то похожее на CFRunLoopPerformBlock()
которая доступна для программы на C / C ++, или я вынужден использовать таймер с нулевой задержкой?
Функция блочного языка не требует использования Objective-C. Это также поддерживается в C и C ++ Clang. Итак, вы можете пойти дальше и использовать 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);