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

關於cpu資源100%

尚未結案
ZongDe
一般會員


發表:9
回覆:11
積分:4
註冊:2002-11-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-18 11:15:18 IP:61.70.xxx.xxx 未訂閱
我在Timer中使用了兩個迴圈來顯示即時的資料,結果CPU 資源竟然達到100%    請問CPU 資源100% 會產生什麼影響嬤 如果會需要如何改寫,才不會產生這個問題    我目前寫的是通訊程式,在一個Timer時間中送出控制封包,及接收回傳的封包 加以處理,然後再將處理結果顯示出來  
void __fastcall Tform1::Timer1Timer(TObject *Sender)
{
  send();
  readBuf();
  for ()
    for ()
      SG->Cells[][] = data;
}
void readbuf()
{
  do
  {
    //取出byte資料
    //判斷有幾筆是否接收完畢
  }
   while();
}    
如果還看不懂我可以在post完整的程式 發表人 - zongde 於 2004/03/18 14:28:03
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-18 11:28:57 IP:203.73.xxx.xxx 未訂閱
引言: 我在Timer中使用了兩個迴圈來顯示即時的資料,結果CPU 資源竟然達到100% 請問CPU 資源100% 會產生什麼影響嬤 如果會需要如何改寫,才不會產生這個問題 我目前寫的是通訊程式,在一個Timer時間中送出控制封包,及接收回傳的封包 加以處理,然後再將處理結果顯示出來 void __fastcall Tform1::Timer1Timer(TObject *Sender) { send(); readBuf(); for () for () SG->Cells[][] = data; } void readbuf() { do { //取出byte資料 //判斷有幾筆是否接收完畢 } while(); } 如果還看不懂我可以在post完整的程式
ZongDe 你好: 先試試在你的迴圈裡面加上以下兩行程式碼 < class="code"> Sleep(100); // 休眠 0.1 seconds // Sleep(10); // 或者休眠 0.01 seconds Application->ProcessMessages(); 備註: 這一行 Application->ProcessMessages(); 不加應該也可以!! -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2004/03/18 14:48:52
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
ZongDe
一般會員


發表:9
回覆:11
積分:4
註冊:2002-11-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-18 11:38:29 IP:61.70.xxx.xxx 未訂閱
版主你好 我有試著在Timer中加入 Timer->Enabled = false; //處理 Timer->Enabled = true; cpu資源是有下降一點 70-80% 如果軟體時間跟硬體時間要求很高的話 例如我要介面卡透過Rs485一次送出100個控制指令 每個指令需要7個byte 而我是以byte方式傳送,傳送完畢後等待週邊回覆,但是我要隨時在等待接收 接收完畢後在顯示出來 我試試版主的方式,再回來
ZongDe
一般會員


發表:9
回覆:11
積分:4
註冊:2002-11-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-18 13:57:54 IP:61.70.xxx.xxx 未訂閱
剛剛試了一下,加入Sleep()後,CPU 使用率下降到60%左右 但是加入Application->ProcessMessages();我的程式會關不掉 去看說明好像是depends出去要等到迴圈結束,才能離開    但是我的程式中使用的是輪詢的方式去處理週邊硬體的資料
void __fastcall Tform1::Timer1Timer(TObject *Sender)
{
  send();  //送出7byte
  readbuf();//接收週邊回來的封包
  show();    
  Sleep(100);
  Application->ProcessMessages();//加入這整個程式關不掉
}
void __fastcall Tform1::ButtonClick(TObject *Sender)
{
  this->Close;
}
void send()
{
  for (int i=0;i<7;i  )
  {
    SetPortByte(HwCtrl,addr,Dat);
  }
}
void readbuf()
{
  do
  {
  BYTE x,x1,r;
  x= dprd(rxindi);                // get RX buf in index
  x1= rxindo;
  if (x != x1)                // compare buf in/out index
  {
    r= dprd(rxbuf x1);
    rxindo= (x1 1) & 0x1f;
    rxsvr(r);                // call packge check subrouting.
  }     
  }while(x!=x1);
}    void __fascall Tform1::show()
{
for (int i=0;i<16;i  )
  for (int j=0;j<16;j  )
    SG->Cells[i][j] = data;
}    }
第一次發言,可能表達的不好請多多包含 抱歉抱歉修改完畢 發表人 -
系統時間:2024-05-18 17:53:48
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!