線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1281
推到 Plurk!
推到 Facebook!

Spcomm與Timer元件的使用(程式無回應)

尚未結案
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-12 21:36:42 IP:59.36.xxx.xxx 未訂閱
大家好! 我用Timer元件與Spcomm做即時通訊.在程式運行時不能與其他程式之間做切換,並且有時候不動它也會出現如下圖那種情況:占用CPU100%, Timer1.Enabled := True ; Timer1.Interval := 150 ; 有試過將Interval改為500或1000,還是執行一會也會有這種情況,有搜尋過原來的文章,有些建議用多執行緒(我不會),請問怎麼解決這種問題?用Timer不行嗎? 謝謝大家!    
procedure TfmMain.Timer1Timer(Sender: TObject);
begin
    sbuf[0] := $02;
    sbuf[1] := $30;
    sbuf[2] := $31;
    sbuf[3] := $34;
    sbuf[4] := $36;
    sbuf[5] := $30;
    sbuf[6] := $44;
    sbuf[7] := $44;
    sbuf[8] := $44;
    sbuf[9] := $30;
    sbuf[10] := $30;
    sbuf[11] := $30;
    sbuf[12] := $35;
    sbuf[13] := $30;
    sbuf[14] := $42;
    sbuf[15] := $43;
    sbuf[16] := $03;
    senddata;
end;
procedure TfmMain.senddata;  //發送資料
var
  i: integer;
  commflg: boolean;
begin
  commflg:=true;
  for i:=0 to 16 do
  begin
    if not fmMain.Comm1.WriteCommData(@sbuf[i],1) then
      begin
        commflg:=false;  //發送失敗
        break;
      end ;
      Application.ProcessMessages;      
      sleep(2); 
  end;
  if not commflg then
    begin
     Abort;
    end;
end;    procedure TfmMain.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
  BufferLength: Word);
  var
    i : Integer ;
begin
  viewstring:='';
  move(buffer^,rbuf,bufferlength);  
  for i:=0 to bufferlength-1 do
    viewstring:=viewstring+ inttohex(rbuf[i],2)+' ';           viewstring:='接收<<'+ viewstring;
      memo1.Lines.Add(viewstring);
      memo1.Lines.Add('數據接收OK!');
end;    
boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-13 15:52:44 IP:203.217.xxx.xxx 未訂閱
問題可能出在這裏:  
 
  if not commflg then
    begin
     Abort;
    end;
這裏為什麼要用 abort ? 如果你是要跳離副程式, 你應該用 exit 試試將 abort 拿掉, 或將 abort 改成 exit, 問題應該就解決了 發表人 - boson 於 2005/05/13 17:03:40
zxy666666
中階會員


發表:108
回覆:150
積分:86
註冊:2005-01-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-14 08:17:18 IP:219.130.xxx.xxx 未訂閱
hi,boson您好!謝謝你的解答 好像還真的是這樣,我將Abort改為EXIT就好了 原來我在程式中經常混用使用Abort,Exit. 其實我是不太知道什麼地方使用這兩個語句, 對我來說,Abort比Exit用的機會還多呢, 比如說我經常這樣使用:
procedure TForm1.Button1Click(Sender: TObject);
begin
if A then
 begin 
   Edit1.SetFocus;
   Abort;
 end;
end;
可否請問一下: 這兩個語句分別在什麼情況下使用?非常感謝! 發表人 - zxy666666 於 2005/05/14 10:39:53
boson
中階會員


發表:74
回覆:155
積分:85
註冊:2004-07-31

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-14 08:36:51 IP:70.84.xxx.xxx 未訂閱
大部份情況下, 你不會用到 abort 單純要從副程式中間直接跳離, 用的是 exit 而 abort 事實上是會產生一個 exception, 目的是要阻斷某些事件程式繼續執行 詳細內容, 請直接在 delphi 的 Help 中查詢即可 順便提一下, 你這樣的程式, 開一個執行緒來處理確實會比較好
系統時間:2024-06-02 1:32:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!