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

0

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

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

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

Теги:
cocoa

1 ответ

1
Лучший ответ

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню