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

執行.exe檔中大迴圈時 介面會暫時卡住

答題得分者是:harpist
dominicx
一般會員


發表:6
回覆:10
積分:13
註冊:2007-05-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-22 17:57:50 IP:218.168.xxx.xxx 訂閱
我目前在做有關圖形處理的論文程式
因此在執行回圈的時候, 次數會相當的高, 單次的運算量也很重
小弟我直接從BCB run我的程式的時候都沒問題
但是run .exe的檔案的時候 在執行這部份回圈的地方, 會造成我的介面無法及時更新, 看似有點小當機的狀況
不過這部份回圈執行完畢後又恢復正常了

正常的模樣
dominic7125.myweb.hinet.net/normal.jpg
小當掉的樣子
dominic7125.myweb.hinet.net/crash.jpg


因為我的程式是會要上台Demo的, 所以想改善一下這個執行時, 介面會造成不美觀部份
由於程式很大, 我只擷取會造成介面delay的部份的原始碼
<textarea class="cpp" rows="10" cols="60" name="code">//============= //下列原始碼是將圖檔從資料庫當中讀出來, 然後經過轉化存放到陣列當中 //============= class DataBase{ public: AnsiString name[4804]; int TPC[4804],CC[4804],PBA[4804]; int picture[4804][50][50]; }; //============= DB = new(DataBase); TStream *pms = new TMemoryStream(); ADOTable1->First(); for(int i=0;i<4804;i ){ StatusBar1->SimpleText = "Connecting Database ...." (AnsiString)i; DB->name[i] = ADOTable1->FieldValues["char"]; DB->TPC[i] = ADOTable1->FieldValues["TPC"]; DB->CC[i] = ADOTable1->FieldValues["CC"]; DB->PBA[i] = ADOTable1->FieldValues["PBA"]; pms = new TMemoryStream(); ADOTable1picture->SaveToStream(pms); pms->Position = 0; Image1->Picture->Bitmap->LoadFromStream(pms); for(int j=0;j<50;j ){ for(int k=0;k<50;k ){ if(GetRValue(Image1->Canvas->Pixels[j][k])==0){ DB->picture[i][j][k] = 1; }else{ DB->picture[i][j][k] = 0; } } } Form1->Refresh(); delete pms; ADOTable1->Next(); } StatusBar1->SimpleText = "Database is loaded."; Clean(Image1);</textarea>
編輯記錄
dominicx 重新編輯於 2007-07-23 08:45:44, 註解 無‧
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-22 22:17:33 IP:211.74.xxx.xxx 未訂閱
<textarea class="cpp" rows="10" cols="60" name="code"> for(int i=0;i<4804;i ) { StatusBar1->SimpleText = "Connecting Database ...." (AnsiString)i; DB->name[i] = ADOTable1->FieldValues["char"]; DB->TPC[i] = ADOTable1->FieldValues["TPC"]; DB->CC[i] = ADOTable1->FieldValues["CC"]; DB->PBA[i] = ADOTable1->FieldValues["PBA"]; pms = new TMemoryStream(); ADOTable1picture->SaveToStream(pms); pms->Position = 0; Image1->Picture->Bitmap->LoadFromStream(pms); for(int j=0;j<50;j ) { for(int k=0;k<50;k ) { if(GetRValue(Image1->Canvas->Pixels[j][k])==0) { DB->picture[i][j][k] = 1; } else { DB->picture[i][j][k] = 0; } Application->ProcessMessages(); //加這行 } Application->ProcessMessages(); //加這行 } Form1->Refresh(); delete pms; ADOTable1->Next(); Application->ProcessMessages(); //加這行 } </textarea> 在迴圈裡加Application->ProcessMessages();釋放一下資源讓系統處理一下其它的Windows Messages。
------
~§~迷時師渡,悟了自渡~§~
dominicx
一般會員


發表:6
回覆:10
積分:13
註冊:2007-05-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-23 08:50:51 IP:218.168.xxx.xxx 訂閱
感謝~!
已解決!

另外一個小問題
Application->ProcessMessages();
這個method會影響效能嗎?
編輯記錄
dominicx 重新編輯於 2007-07-23 08:51:41, 註解 無‧
harpist
資深會員


發表:3
回覆:251
積分:430
註冊:2002-10-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-23 12:50:40 IP:59.105.xxx.xxx 未訂閱
既然釋放了資源處理其他事情當然會影響迴圈的效能^^
===================引 用 dominicx 文 章===================
另外一個小問題
Application->ProcessMessages();
這個method會影響效能嗎?
------
~§~迷時師渡,悟了自渡~§~
daniel710624
一般會員


發表:11
回覆:13
積分:4
註冊:2003-04-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-07-26 20:43:29 IP:202.105.xxx.xxx 訂閱
不好意思,借此題請教一下,同樣的觀念, 是否也可應用在Delphi中?
是不是也可改善程式執行時,東一塊反白,西一塊反白的現像?

===================引 用 dominicx 文 章===================
感謝~!
已解決!

另外一個小問題
Application->ProcessMessages();
這個method會影響效能嗎?
mypigbaby
高階會員


發表:11
回覆:168
積分:155
註冊:2006-07-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-07-27 08:26:41 IP:203.73.xxx.xxx 訂閱
delphi的用法是
Application.ProcessMessages;

===================引 用 daniel710624 文 章===================
不好意思,借此題請教一下,同樣的觀念, 是否也可應用在Delphi中?
是不是也可改善程式執行時,東一塊反白,西一塊反白的現像?

===================引 用 dominicx 文 章===================
感謝~!
已解決!

另外一個小問題
Application->ProcessMessages();
這個method會影響效能嗎?
系統時間:2024-05-02 11:12:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!