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