2008-11-14 134 views
0

我在Windows CE面對奇怪的問題運行無限奇怪的問題:while循環EXE

運行3個EXE文件

1)首先exe文件做了一些工作,每8分鐘,除非退出事件發出信號。 2)第二個exe每5分鐘做一些工作,除非退出事件發信號。 3)循環運行時的第三個exe文件,while循環在隨機時間執行一些工作。 此while循環一直繼續,直到退出事件發出信號。

現在這個退出事件是全局事件,可以通過任何進程發送信號。

問題是 當我運行首先exe文件,它工作正常, 運行第二個exe文件,它工作正常, 運行第三exe文件,它工作正常

當我運行的所有EXE文件,然後僅第三exe文件運行,並沒有說明得到在第一個和第二個執行。

只要第三個exe被終止,第一個和第二個開始處理。 這可能是這樣的情況,而在第三個exe循環是所有的CPU週期? 我還沒有嘗試過睡覺,但我認爲這可以做一些技巧。 但操作系統應該給所有進程的CPU ... 任何想法???

+0

不確定時間切片是否像Windows CE上那樣工作,但我可能是錯誤的 – 2008-11-14 06:46:30

回答

2

將第三個EXE中的while循環放入循環中,每次都通過循環,看看會發生什麼。即使它不能解決這個問題,但用循環輪詢並不是一個好習慣,甚至在循環中使用Sleep也不是一個合適的定時器的替代品。

0

是的,我認爲這不是很好的解決方案。我可能會嘗試使用計時器並查看結果。

1

MSDN上,我還看到CE允許(小於)32個進程同時進行。 (但是,上下文切換閃電般快......)。有些已經被系統服務佔用。

+0

有趣。我曾經接管過一個在while循環中創建新進程的.NET CF應用程序。我知道這是非常糟糕的,但這是一些額外的信息,爲什麼。 – MusiGenesis 2008-11-14 16:37:26

1

(來自內存)如果沒有更高優先級的進程在運行,或者如果有其他同等優先級的進程正在運行,它們將運行其時間片(100ms),直到完成爲止。我不確定Windows CE是否爲進程提供了主動/前景窗口的小優先級提升(就像桌面Windows一樣),或者不是。

在你的情況下,前兩個進程缺乏處理器時間,所以他們從不運行,直到第三個進程退出。解決這個問題的一些方法如下:

  • 在某些多進程原語(互斥量,信號量等)和短超時時間內,使第三個進程等待/阻塞。使用WaitForMultipleObjects/WaitForSingleObject等。
  • 使處理等待,每處理循環周圍使用一次調用Sleep來等待第三個進程。
  • 提高其他進程的優先級,因此當它們需要運行時,它們將中斷第三個進程並實際運行。我可能會讓最不經常被調用的進程擁有三個進程中最高的優先級。

另一件要檢查的事情是第三個進程確實實際上完成了它的任務,並且不會掛住CPU試圖正常執行它的任務。