在數據處理量很大的情況下,如何在數據處理的同時響應用戶操作?Window s95/98和WindowsNT作為多線程的多任務操作系統,其調度單元是線程,即線程是 系統分配處理器時間資源的基本單元,所以我們可以利用線程實現在處理大批量 數據的同時響應用戶操作。 DELPHI作為一個優秀的開發平臺,對開發多線程應用程序提供了強有力的支 持,即可直接利用32位Windows環境提供的Win32API接口函數CreateThread,也可 利用DELPHI中提供的BeginThread函數。在下面例子中,正是使用了DELPHI提供的 TThread類。 一.基本的方法如下: 1.從Tthread類派生一個新類。(創建TSortThread類) 2.定義新類的Create方法。 3.定義新類的Execute方法,并在Execute方法中插入線程運行時執行的代碼 。 4.引用類方法創建實例。 二.例子的詳細代碼及說明: 首先,新建一個單元,保存為mysort.pas.在此單元中,我們創建了一個TSo rtThread類,它從TThread類中繼承而來,所以當我們在程序中創建這個類的一個 實例時,也就是創建了一個新的線程。 接著,在該類中定義一個Sort方法,用來對數組進行排序,同時TSortThrea d類超越了TThread類的構造方法Create和Execute,在execute方法中,調用了對 數組進行排序的Sort方法。具體代碼如下: unitmysort; interface usesClasses;//TThread類在Classes中被定義。 type PSortArray=TSortArray; TSortArray=array.[0..MaxIntdivSize Of(Integer)-1]ofInteger; {此處定義了TsortThread類} TSortThread=class(TThread) Private {在TSortThread類中定義了如下幾個私有變元} FSortArray:PSortArray; FSize:Integer; FA,FB,FI,FJ:Integer; Protected {類TSortThread超越了類Tthread的Execute方法} procedure Execute;override; {類TsortThread添加了一個Sort方法} procedure Sort(varA:arrayofInteger); public {類TSortThread超越了類Tthread的構造方法} constructorCreate(varSortArray:arrayofInteger); end; implementation constructorTSortThread.Create(varSortArray:arrayofInteger); begin FSortArray:=@SortArray; FSize:=High(SortArray)-Low(SortArray)+1; FreeOn Terminate:=True; inheritedCreate(False); end; {當線程開始時,Execute方法將被調用。} 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處加入usesmysort,在執行排序的地 方加入TQuickSortthread.Create(SortArray),其中SortArray為一實際的數組。 這樣就可以用線程實現排序,在排序過程中,用戶不必等到排序結束就可以執行 其它操作。這種用多線程實時響應用戶操作方法在涉及大量數據處理的應用程序 中顯得尤為重要。 (湖南 劉一帆)
|