delphi 多執行緒例項

2021-04-13 23:27:59 字數 2180 閱讀 2308

下面筆者將介紹乙個簡單的例項,解釋和說明前面所述的內容。

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...