Spcomm與Timer元件的使用(程式無回應) |
尚未結案
|
zxy666666
中階會員 發表:108 回覆:150 積分:86 註冊:2005-01-14 發送簡訊給我 |
大家好!
我用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 發送簡訊給我 |
|
zxy666666
中階會員 發表:108 回覆:150 積分:86 註冊:2005-01-14 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |