如何利用SPComm讀取資料(非觸發) |
答題得分者是:hagar
|
kan0515
中階會員 發表:56 回覆:120 積分:50 註冊:2002-06-24 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
kan0515
中階會員 發表:56 回覆:120 積分:50 註冊:2002-06-24 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
您可以用如下的方式:
begin spcomm1.WriteCommData(...); // 送出資料 Application.ProcessMessages; DelayMSec(300); // Delay 300 ms, 在這等待期間, 觸發 SPComm 接收的動作 ...; // 做接下來的事 end; procedure DelayMSec(MSec: Word); var BeginTick: Word; begin BeginTick := GetTickCount; while (GetTickCount - BeginTick <= 300) do begin Application.ProcessMessages; Sleep(30); end; end;-- Everything I say is a lie. 發表人 - hagar 於 2002/12/13 17:59:54 |
kan0515
中階會員 發表:56 回覆:120 積分:50 註冊:2002-06-24 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
var GotResult: Boolean; procedure Send; var i: integer; begin for i := 1 to 3 do begin GotResult := False; spcomm1.WriteCommData(...); // 送出資料 Application.ProcessMessages; DelayMSec(300); if not GotResult then if i < 3 then Continue // 沒收到預期字串, 再送一次 else Exit; // 送了 3 次都沒收到預期字串 end; ...; end; end; procedure DelayMSec(MSec: Word); var BeginTick: Word; begin BeginTick := GetTickCount; while (GetTickCount - BeginTick <= 300) do begin Application.ProcessMessages; Sleep(30); end; end; procedure TFCOMM.Comm1ReceiveData(Sender: TObject; Buffer: Pointer; BufferLength: Word); var sTmp: string; begin SetLength(sTmp, BufferLength); Move(buffer^, pchar(sTmp)^, BufferLength); if sTmp = 'RespectedString' then GotResult := True; // 收到要的字串 end;-- Everything I say is a lie. |
kan0515
中階會員 發表:56 回覆:120 積分:50 註冊:2002-06-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |