Самый простой способ добавить немедленную задачу в `CFRunLoop`?

Какой самый простой способ добавить немедленную одноразовую задачу в CFRunLoop из программы на C / C ++, то есть обратного вызова, который должен быть вызван циклом выполнения, прежде чем он снова блокируется.

Согласно документации, мы имеем CFRunLoopPerformBlock()Но проблема в том, что он использует блочную нотацию, которая требует режима компиляции Objective-C.

Есть ли что-то похожее на CFRunLoopPerformBlock() которая доступна для программы на C / C ++, или я вынужден использовать таймер с нулевой задержкой?

0

Решение

Функция блочного языка не требует использования 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);
1

Другие решения