在資料處理量很大的情況下,如何在資料處理的同時響應使用者操作?windows95/98和windowsnt作為多執行緒的多工作業系統,其排程單元是執行緒,即執行緒是系統分配處理器時間資源的基本單元,所以我們可以利用執行緒實現在處理大批量資料的同時響應使用者操作。
delphi作為乙個優秀的開發平台,對開發多執行緒應用程式提供了強有力的支援,即可直接利用32位windows環境提供的win32api介面函式createthread,也可利用
delphi中提供的beginthread函式。在下面例子中,正是使用了
delphi提供的tthread類。
一.基本的方法如下:
1.從tthread類派生乙個新類。(建立tsortthread類)
2.定義新類的create方法。
3.定義新類的execute方法,並在execute方法中插入執行緒執行時執行的**。
4.引用類方法建立例項。
二.例子的詳細**及說明:
首先,新建乙個單元,儲存為mysort.pas.在此單元中,我們建立了乙個tsortthread類,它從tthread類中繼承而來,所以當我們在程式中建立這個類的乙個例項時,也就是建立了乙個新的執行緒。
接著,在該類中定義乙個sort方法,用來對陣列進行排序,同時tsortthread類超越了tthread類的構造方法create和execute,在execute方法中,呼叫了對陣列進行排序的sort方法。具體**如下:
unitmysort;
inte***ce
usesclasses;//tthread類在classes中被定義。
type
psortarray=tsortarray;
tsortarray=array.[0..maxintdivsize
of(integer)-1]ofinteger;
tsortthread=class(tthread)
private
fsortarray:psortarray;
fsize:integer;
fa,fb,fi,fj:integer;
protected
procedure execute;override;
procedure sort(vara:arrayofinteger);
public
constructorcreate(varsortarray:arrayofinteger);
end;
implementation
constructortsortthread.create(varsortarray:arrayofinteger);
begin
fsortarray:=@sortarray;
fsize:=high(sortarray)-low(sortarray)+1;
freeon terminate:=true;
inheritedcreate(false);
end;
procedure tsortthread.execu
te;
begin
sort(slice(fsortarray,fsize));
end;
procedure tsortthread.sort(vara:arrayofinteger);
var
i,j,t:integer;
begin
for i:=high(a)downto low(a) do
for j:=low(a)to high(a)-1 do
if a[j]>a[j+1] then
begin
t:=a[j];
a[j]:=a[j+1];
a[j+1]:=t;
if terminated then exit;
end;
end;
end
最後,在使用者應用程式的implementation處加入use**ysort,在執行排序的地方加入tquicksortthread.create(sortarray),其中sortarray為一實際的陣列。這樣就可以用執行緒實現排序,在排序過程中,使用者不必等到排序結束就可以執行其它操作。這種用多執行緒實時響應使用者操作方法在涉及大量資料處理的應用程式中顯得尤為重要。
在DELPHI中用執行緒排序
在資料處理量很大的情況下,如何在資料處理的同時響應使用者操作?windows95 98和windowsnt作為多執行緒的多工作業系統,其排程單元是執行緒,即執行緒是系統分配處理器時間資源的基本單元,所以我們可以利用執行緒實現在處理大批量資料的同時響應使用者操作。delphi作為乙個優秀的開發平台,對...
在Delphi中用XSLT轉換xml檔案格式
uses xmldoc,xmlintf function transform xmlcontent string xslcontent string widestring var xml ixmldocument xsl ixmldocument begin xml loadxmldata xmlc...
在Delphi中用XSLT轉換xml檔案格式
uses xmldoc,xmlintf function transform xmlcontent string xslcontent string widestring var xml ixmldocument xsl ixmldocument begin xml loadxmldata xmlc...