CFRunloopRun()和简单的无限循环之间的区别?

时间:2019-04-26 22:44:28

标签: ios objective-c macos runloop

我在当前运行循环上计划HIDManager,它是main函数的运行循环。

当我添加以下行

CFRunLoopRun();

将捕获所有HID事件,并在与Runloop模型兼容的屏幕上显示输出

enter image description here

但是如果我添加

for(;;);

在主循环的最后,据我了解,我还可以保持该运行循环的存在,并且该线程将永不消亡。为什么为什么我没有收到任何HID事件,现在屏幕上什么都没打印出来?

1 个答案:

答案 0 :(得分:2)

CFRunLoopRun()的工作方式不同于简单的无限循环,因为它暂停程序的执行并等待新事件到来,这可能是计时器触发,HID事件等。当您调用{{1 }},您会注意到只要没有新事件到来,程序的CPU使用率就会降为零。

通过在运行循环所在的线程内运行无限循环,您的程序正忙于运行该无限循环,并且没有时间处理新事件。