Разница между CFRunloopRun () и простым бесконечным циклом? - PullRequest
0 голосов
/ 27 апреля 2019

Я планирую HIDManager для текущего цикла выполнения, который является циклом выполнения для функции main.

Когда я добавляю следующую строку

CFRunLoopRun();

Все события HID будут записаны, и результат будет показан на экране, который совместим с Runloop Model

enter image description here

Но если я добавлю

for(;;);

в конце основного цикла, насколько я понимаю, я могу также сохранить этот цикл выполнения, и поток никогда не умрет. Почему я не могу получить какие-либо события HID и на экране ничего не напечатано?

1 Ответ

2 голосов
/ 27 апреля 2019

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

Запустив бесконечный цикл внутри потока, в котором включен ваш цикл выполнения, ваша программа занята выполнением этого бесконечного цикла, и у нее нет времени на обработку новых событий.

...