【发布时间】:2020-11-17 08:28:51
【问题描述】:
我用 C 语言编写了一个程序,它的主循环如下所示:
while (running) {
int recv = read_line(fd1, buf, sizeof(buf));
if (recv > -1) {
processCommand(buf);
}
while (XPending(display)) {
XNextEvent(display, &ev); // This is blocking
// Handle event
}
}
您可以看到我们有 2 个事件源,其中一个是阻塞的。
这工作正常,但这意味着我有 100% 的 CPU 使用率。通常在这样的程序中,阻塞调用会解决这个问题,但是因为我有两件事要检查,所以我不能让循环被阻塞。
这样编程的正确方法是什么:
- CPU 未达到 100% 使用率
- 每个循环都会检查两个事件源。
【问题讨论】:
-
一种可能性是使用单独的线程处理源。这样,您只需要带有阻塞调用的简单循环。