下面筆者將介紹乙個簡單的例項,解釋和說明前面所述的內容。
1) 建立form,在其中建立兩個按鈕「開始採集」 和「停止採集」,新增乙個paintbox1。
2) 建立乙個新的單元,在其中輸入以下**:
unit collectthread;
inte***ce
uses
classes,sysutils,stdctrls,graphics;
type
tcollectdatathread = class(tthread)
private
fpresettime:word;
fusedtime:integer;
fcanvas:tcanvas;
protected
procedure execute; override;
procedure showdata;
public
collectdata:array[0..1023]of integer;
constructor create(presettime:word;canvas:tcanvas);
end;
implementation
constructor tcollectdatathread.create(presettime:word;canvas:tcanvas);
var i:integer;
begin
for i:=0 to 1023 do collectdata[i]:=0;
// 給資料賦初值
fcanvas:=canvas;
fpresettime:=presettime; // 預置採集次數
fusedtime:=0;
// 已經採集的次數
inherited create(true);
freeonterminate := true; //當執行緒終止時自動釋放該執行緒
end;
procedure tcollectdatathread.execute;
varflag:byte;
address:byte;
i:integer;
begin
while fusedtime < fpresettime do
begin
fusedtime:=fusedtime+1;
flag:=0; // 資料準備好標誌
for i:=0 to 9000000 do //產生遲延,
flag:=i;
if flag>0 then
begin
collectdata[fusedtime]:=round(50.0*sin(3.1415/50*fusedtime));
synchronize(showdata); //同步呼叫資料顯示函式
end;
end; //while fusedtimedoterminate; //時間到後執行緒終止
end;
// 在指定的畫布上顯示採集到的資料;
procedure tcollectdatathread.showdata;
begin
fcanvas.pixels[2*fusedtime,80+collectdata[fusedtime]]:=clred;
end;
end.
3) 在form的單元檔案中宣告變數colltestthread:tcollectdatathread,並在form的oncreate事件中加入以下**:
colltestthread:= tcollectdatathread.create(500,paintbox1.canvas);
4)在「開始採集」按鈕的onclick事件中加入以下**:
colltestthread.resume;
5) 在「暫停採集」按鈕的onclick事件中加入以下**:
colltestthread.suspend;
使用者可以利用前面所提到的synchronize函式來窗體,或者使用定時器定期重新整理螢幕,這兩種方式都可以間隔一定時間顯示採集資料情況。
6、結束語
採用上面所述的方法,筆者實現了對心電譜資料的採集和顯示,達到了很好的效果。本方法尤其適用於那些利用計算機i/o插槽來實現資料採集的硬體裝置,串列埠通訊中的採集方法也與上述思想相類似。鑑於筆者的水平有限,歡迎讀者批評指正文章中的不足之處。
delphi 多執行緒
摘自 萬一的部落格 functionmyfun p pointer integer stdcall var i integer begin fori 0to500000do begin form1.canvas.lock form1.canvas.textout 10,10,inttostr i f...
delphi 多執行緒
看別人的部落格一萬次記憶效果也沒那麼好,還是自己動手寫寫吧!functioncreatethread lpthreadattributes pointer dwstacksize dword lpstartaddress tfnthreadstartroutine lpparameter point...
delphi多執行緒釋放
delphi建立了多執行緒後,要想在執行完成後自動釋放所用的資源,可以在建構函式constructor裡指定 執行緒結束時的執行事件,onterminate finishedevent 這樣,當乙個執行緒執行完成後,就會自動呼叫 這個過程,當然,在建構函式裡還必須先有這兩句 inherited cr...