在EXE中运行无限循环的奇怪问题

时间:2008-11-14 06:44:21

标签: c++ windows-mobile

我在Windows CE上遇到了一个奇怪的问题:

运行3个EXE

1)除非发出退出事件,否则第一个exe每8分钟做一些工作。 2)除非退出事件发出信号,否则第二个exe每5分钟做一些工作。 3)循环运行时的第三个exe,在while循环中,它随机地执行一些工作。 这个while循环一直持续到发出退出事件为止。

现在这个退出事件是全局事件,任何进程都可以发出信号。

问题是 当我运行First exe它工作正常, 运行第二个exe它工作正常, 运行第三个exe它工作正常

当我运行所有exes时,只有第三个exe运行,并且没有指令在第一个和第二个执行。

第三个exe一旦被终止,第二个就开始处理。 可能是第三个exe循环占用所有CPU周期的情况? 我没有尝试过睡觉,但我认为这可以做一些技巧。 但OS应该为所有进程提供CPU ... 任何想法???

4 个答案:

答案 0 :(得分:2)

将while循环放在第三个EXE中,每次循环休眠,看看会发生什么。即使它没有修复这个特定的探测器,使用while循环进行轮询也不是一个好习惯,即使在循环内使用Sleep也不能替代正确的计时器。

答案 1 :(得分:1)

MSDN上,我还读到CE允许(少于)32个进程同时进行。 (但是,上下文切换很快......)。有些已被系统服务占用。

答案 2 :(得分:1)

(从内存)如果没有更高优先级的进程在运行,则Windows CE中的进程将一直运行,或者如果有其他进程具有相同优先级的运行,则它们会运行其时间片(100ms)。我不确定Windows CE是否为活动/前台窗口提供了一个小优先级提升(就像桌面Windows一样)。

在您的情况下,前两个进程缺乏处理器时间,因此它们永远不会运行,直到第三个进程退出。解决此问题的一些方法是:

  • 对某些多进程原语(互斥,信号量等)和短暂超时进行第三个进程等待/阻止。使用WaitForMultipleObjects / WaitForSingleObject等。
  • 每次围绕处理循环使第三个进程等待使用Sleep休眠。
  • 提升其他进程的优先级,因此当需要运行时,它们将中断第三个进程并实际运行。我可能会让经常被调用的流程具有三个流程中最高优先级。

要检查的另一件事是第三个进程实际上确实及时完成了它的任务,并且没有固定CPU试图正常地执行它的事情。

答案 3 :(得分:0)

是的,我认为这不是一个好的解决方案。我可能会尝试使用计时器并查看结果..