0

据我所知,事件驱动程序需要一个主循环,例如

while (1) {

} 

我只是好奇这个while循环是否会消耗高CPU使用率?有没有其他方法可以在不使用主循环的情况下实现事件驱动程序?

4

2 回答 2

3

您的示例具有误导性。通常,事件循环看起来像这样:

Event e;
while ((e = get_next_event()) != E_QUIT)
{
    handle(e);
}

关键点是对我们虚构的get_next_event()泵送函数的函数调用将是慷慨的,并鼓励上下文切换或任何适用于您的平台的调度语义,如果没有事件,该函数可能会允许整个进程休眠直到发生事件到达。

所以在实践中,没有什么可担心的,不,如果你想在程序运行时处理无限量的信息,没有任何替代无限循环的方法。

于 2012-05-06T00:33:54.583 回答
1

通常,像这样的循环的问题在于,当它在做一件工作时,它不能做任何其他事情(例如,Windows SDK 的旧的“合作”多任务处理)。下一个天真的跳跃通常是为每件工作产生一个线程,但这是非常危险的。大多数人最终会得到一个内部通常有一个线程池的执行器。然后,句柄调用实际上只是将工作入队,下一个可用线程将其出队并执行。并发线程数保持固定为池中工作线程的总数,当线程无事可做时,它们不会占用 CPU。

于 2012-05-06T01:04:53.643 回答