全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1859
推到 Plurk!
推到 Facebook!

迴圈和記憶體問題

尚未結案
yachu721
初階會員


發表:51
回覆:98
積分:44
註冊:2003-07-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-13 23:39:05 IP:203.67.xxx.xxx 未訂閱
當我使用while迴圈的時候 記憶體總是飆的很高 然而我在迴圈中加入 Sleep(1); 是可以有效降低 但是迴圈速度又變的超慢 不知是否有辦法解決呢    如下     
int d=0;
while(true)
{
d=d 1;
Sleep(1);
}
 
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-14 00:54:23 IP:61.217.xxx.xxx 未訂閱
yachu721 您好:    用 Application->ProcessMessages(); 來代換掉 Sleep(1); 那一行敘述,看看能不能滿足您的需求? 7 天天敲鍵盤 v 時時按滑鼠 8
yachu721
初階會員


發表:51
回覆:98
積分:44
註冊:2003-07-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-14 08:39:18 IP:220.130.xxx.xxx 未訂閱
RedSnow版大您好 Application->ProcessMessages(); 我試了一下 可以在我想要中斷的時候不會當掉 但是還是沒有辦法降下記憶體的量 電腦還是慢了
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-14 14:27:51 IP:59.115.xxx.xxx 未訂閱
yachu721 您好:    您實際運作的程式碼與您貼上來的程式碼不是一回事吧?僅有一個無限迴圈,裡邊什麼動作都沒做,怎麼可能會一直不斷的多佔用記憶體?多佔用記憶體的現象應該是其它的程式敘述所造成的,與您貼上來的程式碼無關吧?    我提供的方式是讓您在執行迴圈時不會讓程式被咬住,而且速度不至於會像使用 Sleep() 那樣變得非常慢,迴圈內什麼都不做做任何一個小動作來相比,速度上當然會有所差異,這是理所當然的事情,難道您預期兩種狀況的速度會相同嗎? 7 天天敲鍵盤 v 時時按滑鼠 8
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-14 16:01:22 IP:211.22.xxx.xxx 未訂閱
RedSnow版大,小弟插個花! 按照 > -----------------------
yachu721
初階會員


發表:51
回覆:98
積分:44
註冊:2003-07-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-14 22:55:16 IP:203.67.xxx.xxx 未訂閱
RedSnow及Stallion大大們您好 我主要的程式是要使用RS232的設備 來傳送約1MB的資料 但是在傳送的過程中 幾乎為記憶體滿載的狀態 我使用了多執行緒依然還是會有此情形 以下檔案是測試多執行緒的迴圈(BCB6檔) 但是還是出現滿載的情況 不知是否哪該注意 若大大們有空 是否可測試測試呢 http://www.nceasy.com/TestWhile.rar
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-14 23:12:05 IP:59.115.xxx.xxx 未訂閱
yachu721 您好:    請先澄清一下,您的問題到底是指記憶體佔用量飆高還是CPU 使用量飆高?這兩者是有差異的。 7 天天敲鍵盤 v 時時按滑鼠 8
Stallion
版主


發表:52
回覆:1600
積分:1995
註冊:2004-09-15

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-11-15 00:22:33 IP:211.22.xxx.xxx 未訂閱
引言: 我主要的程式是要使用RS232的設備 來傳送約1MB的資料 但是在傳送的過程中 幾乎為記憶體滿載的狀態 我使用了多執行緒依然還是會有此情形 以下檔案是測試多執行緒的迴圈(BCB6檔) 但是還是出現滿載的情況 不知是否哪該注意 若大大們有空 是否可測試測試呢
RedSnow版大,他指的應該是CPU滿載吧! > 建議寫個>當有資料要處理時,才觸發>! 而你的 > 程式的 class="code"> //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Test=new TTest(true); } //--------------------------------------------------------------------------- void __fastcall TForm1::資料已準備好在發送緩衝區的事件(XXX) //屬於RS232串列通信元件的事件 { Test->Resume(); } //--------------------------------------------------------------------------- void __fastcall TForm1::資料已傳送完畢的事件(XXX) { Test->Suspend(); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { Test->Terminate(); Close(); } //------------------------- 如果不這樣寫,那這個THREAD會一直跑,CPU使用率當然一直飆高! ----------------------- Practice makes perfect. 發表人 - stallion 於 2005/11/15 00:24:02
yachu721
初階會員


發表:51
回覆:98
積分:44
註冊:2003-07-13

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-11-15 19:23:53 IP:203.67.xxx.xxx 未訂閱
兩位大大真是不好意思 連問題都發問錯了 不好意思...對不起對不起 我的問題是CPU飆高.. 因為傳輸速率我只使用9600bps 而在一直傳送資料的狀態下 傳送1MB需要16~17分鐘才會傳送完畢 所以都是迴圈的方式保持16~17分鐘 問題就在CPU都在100% 是否在這一直傳送的狀態下 有辦法降低CPU
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-11-15 21:36:07 IP:59.115.xxx.xxx 未訂閱
Stallion 您好:
引言:他指的應該是CPU滿載吧!
我想也是,我只是想提醒 yachu721,用較為適當的用詞來命題與討論會比較好些。 yachu721 您好:
引言:我的問題是CPU飆高..
難怪之前有點雞同鴨講....,建議您將標題做個修正,以便於他人的索引、搜尋,並讓討論內容能切題。
引言:.... 問題就在CPU都在100% 是否在這一直傳送的狀態下 有辦法降低CPU
我不是很確定您為何那麼的在意 CPU 趨近於滿載的情形?是您在傳送資料時,必須要同時做些其它的動作,還是 CPU 趨近於滿載會有什麼不良影響嗎? 您若是在迴圈內使用了 Application->ProcessMessages(); 敘述的話,雖然在執行迴圈時會有 CPU 飆高的現象,但是當您要做其它的操作時,系統還是允許 CPU 做 Time Sharing 的,這個時候您再查看 CPU 的使用率時,就不會是趨近於滿載的狀況了,換言之;這個時候您那個傳輸動作也會慢了下來,當其它的操作告一段落後,傳述動作就會恢復得較快些,CPU 的使用率又會再度飆高,畢竟是單 CPU 的環境,您無法過於強求的,如果想要真正的解決這個問題 (要全速傳輸,又要不影響其它動作),那恐怕就得使用多 CPU 的環境 (包含硬體與作業系統都要能支援多 CPU 才行) 囉~ 7 天天敲鍵盤 v 時時按滑鼠 8
yachu721
初階會員


發表:51
回覆:98
積分:44
註冊:2003-07-13

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-11-15 22:11:50 IP:203.67.xxx.xxx 未訂閱
感謝RedSnow版大及Stallion大大的回答 導正一些觀念及建議 我會再努力的..... 真是有勞您了.....
系統時間:2024-04-26 7:58:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!