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

Difference between CFRunloopRun() and a simple infinite loop?

我在当前运行循环上安排了一个 HIDManager,这是 main 函数的运行循环。

当我添加以下行时

CFRunLoopRun();

所有HID事件都会被捕获并输出到屏幕上,兼容Runloop模型

但是如果我添加一个

for(;;);

在主循环结束时,据我了解,我也可以保持这个runloop存在并且线程永远不会死。为什么我现在收不到任何 HID 事件并且屏幕上什么也没有打印出来?

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

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