【发布时间】:2010-11-16 09:25:35
【问题描述】:
#include <stdio.h>
int main() {
while(!DONE) {
/* check for stuff */
}
return 0;
}
上述代码示例使用 100% cpu 直到 DONE 为真。如何实现一个循环并仅在 DONE 时终止但不使用 100% cpu 的程序? 现代语言使用 App.ProcessMessages 之类的东西来让操作系统暂时控制,然后返回循环。
我是 C 的新手,显然...使用最新的 GCC、linux 和 windows(便携式解决方案会很棒!)
【问题讨论】:
-
您应该使用同步对象,您可以等待它发出信号,这样您根本不会消耗 CPU。
-
什么是
DONE,什么会导致它不为零?大概在“检查东西”评估将 DONE 设置为非零的东西之前继续处理是有意义的? -
Lasse V. Karlsen:您的解决方案似乎很有意义(它可能确实很有意义,但我只是没有这些知识)。你能详细说明一下吗?我应该调查线程吗? (一个很好的例子) Charles Bailey:DONE 应该是一个 int(完成而不是 DONE),例如,当用户选择退出应用程序时,它会设置为 1。如果我不能很好地解释自己,我很抱歉..
-
您不需要使用任何与线程相关的东西来使单线程应用程序不忙于等待。你能告诉我们(通常,甚至)代码在循环中做了什么吗?您似乎暗示它将接受用户输入。这本身应该会导致它花费大量时间等待而不是消耗 CPU。
-
如果“用户输入”是您正在等待的唯一项目,那么您应该对正在使用的任何用户输入方法使用阻塞读取。在获得明智的答案之前,您需要提供有关您的程序的更多详细信息。特别是,如果您只需要一个阻塞调用(例如
getchar()),线程和同步对象就会复杂得多。