CFRunLoopRun()
работает не так, как простой бесконечный цикл, поскольку он приостанавливает выполнение программы и ожидает поступления новых событий, которые могут быть либо срабатыванием таймеров, либо событиями HID и т. Д. Когда вы вызываете CFRunLoopRun()
, вы заметит, что загрузка ЦП вашей программы падает до нуля, если не поступают новые события.
Запустив бесконечный цикл внутри потока, в котором включен ваш цикл выполнения, ваша программа занята выполнением этого бесконечного цикла, и у нее нет времени на обработку новых событий.