国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Delphi > 正文

在DELPHI中用線程排序

2019-11-18 18:59:51
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
   在數(shù)據(jù)處理量很大的情況下,如何在數(shù)據(jù)處理的同時(shí)響應(yīng)用戶操作?Windows95/98和WindowsNT作為多線程的多任務(wù)操作系統(tǒng),其調(diào)度單元是線程,即線程是系統(tǒng)分配處理器時(shí)間資源的基本單元,所以我們可以利用線程實(shí)現(xiàn)在處理大批量數(shù)據(jù)的同時(shí)響應(yīng)用戶操作。
 
  DELPHI作為一個(gè)優(yōu)秀的開(kāi)發(fā)平臺(tái),對(duì)開(kāi)發(fā)多線程應(yīng)用程序提供了強(qiáng)有力的支持,即可直接利用32位Windows環(huán)境提供的Win32API接口函數(shù)CreateThread,也可利用DELPHI中提供的BeginThread函數(shù)。在下面例子中,正是使用了DELPHI提供的TThread類。 

  一.基本的方法如下: 

  1.從Tthread類派生一個(gè)新類。(創(chuàng)建TSortThread類) 
  2.定義新類的Create方法。 
  3.定義新類的Execute方法,并在Execute方法中插入線程運(yùn)行時(shí)執(zhí)行的代碼。 
  4.引用類方法創(chuàng)建實(shí)例。 

  二.例子的詳細(xì)代碼及說(shuō)明: 

  首先,新建一個(gè)單元,保存為mysort.pas.在此單元中,我們創(chuàng)建了一個(gè)TSortThread類,它從TThread類中繼承而來(lái),所以當(dāng)我們?cè)诔绦蛑袆?chuàng)建這個(gè)類的一個(gè)實(shí)例時(shí),也就是創(chuàng)建了一個(gè)新的線程。 

  接著,在該類中定義一個(gè)Sort方法,用來(lái)對(duì)數(shù)組進(jìn)行排序,同時(shí)TSortThread類超越了TThread類的構(gòu)造方法Create和Execute,在execute方法中,調(diào)用了對(duì)數(shù)組進(jìn)行排序的Sort方法。具體代碼如下: 

  unitmysort; 
  interface
  usesClasses;//TThread類在Classes中被定義。 
  type
  PSortArray=TSortArray; 
TSortArray=array.[0..MaxIntdivSize?? 
Of(Integer)-1]ofInteger; 
  {此處定義了TsortThread類} 
  TSortThread=class(TThread) 
  PRivate
  {在TSortThread類中定義了如下幾個(gè)私有變?cè)獇 
  fsortArray:PSortArray; 
  FSize:Integer; 
  FA,FB,FI,FJ:Integer; 
  Protected
  {類TSortThread超越了類Tthread的Execute方法} 
  procedure Execute;override; 
  {類TsortThread添加了一個(gè)Sort方法} 
  procedure Sort(varA:arrayofInteger); 
  public 
  {類TSortThread超越了類Tthread的構(gòu)造方法} 
  constructorCreate(varSortArray:arrayofInteger); 
  end; 
  implementation
  constructorTSortThread.Create(varSortArray:arrayofInteger); 
  begin
  FSortArray:=@SortArray; 
  FSize:=High(SortArray)-Low(SortArray)+1; 
  FreeOn Terminate:=True; 
  inheritedCreate(False); 
  end; 
  {當(dāng)線程開(kāi)始時(shí),Execute方法將被調(diào)用。} 
  procedure TSortThread.Execu?? 
te; 
  begin
  Sort(Slice(FSortArray,FSize)); 
  end; 
  {下面實(shí)現(xiàn)了冒泡法排序} 
  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

  最后,在用戶應(yīng)用程序的implementation處加入usesmysort,在執(zhí)行排序的地方加入TQuickSortthread.Create(SortArray),其中SortArray為一實(shí)際的數(shù)組。這樣就可以用線程實(shí)現(xiàn)排序,在排序過(guò)程中,用戶不必等到排序結(jié)束就可以執(zhí)行其它操作。這種用多線程實(shí)時(shí)響應(yīng)用戶操作方法在涉及大量數(shù)據(jù)處理的應(yīng)用程序中顯得尤為重要。

上一篇:用Delphi編寫DelTree程序

下一篇:在delphi中如何限制鼠標(biāo)的移動(dòng)區(qū)域。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 安丘市| 岳池县| 黄陵县| 招远市| 临洮县| 武功县| 甘谷县| 潜山县| 长海县| 紫阳县| 衡东县| 隆子县| 兴海县| 平山县| 元江| 西藏| 莱阳市| 定日县| 丰镇市| 绵竹市| 清丰县| 临桂县| 保定市| 通山县| 图木舒克市| 安康市| 观塘区| 大理市| 长垣县| 桂阳县| 垫江县| 项城市| 衡阳市| 潜江市| 宜君县| 荥阳市| 得荣县| 阜康市| 平原县| 资阳市| 开平市|