BMDThreadマルチスレッドコントロール

最新バージョンは、他のバージョンは、独自のを修正する必要がサポートするために、2.1 2015年11月10日デルファイXE7、XE8と10シアトル追加する必要があります

公式サイト:www.mitov.com www.openwire.org

1、パスサーチパスを追加

2、BMThreadDsnD7.dpk最初にコンパイル、インストール

2つのコントロールのインストール後

 

 

 

ユニットBMDThread;

インターフェース

用途
  Windowsの、メッセージ、sysutilsの、クラス、コントロール、フォーム、Syncobjs、ExtCtrls。

タイプ
  {フォワードクラス宣言}
  TBMDThread =クラス。
  TBMDExecuteThread =クラス。
  TBMDThreadGroup =クラス。

  {スレッドイベント}
  TBMDThreadNotifyEvent =手順(送信者:TObjectを、スレッド:TBMDExecuteThread)オブジェクトの、
  TBMDThreadDataNotifyEvent =プロシージャオブジェクトの(送信者:TObjectを;:;スレッドTBMDExecuteThread VARデータポインタ)。
  TBMDThreadUpdateNotifyEvent =手順(送信者:TObjectを、スレッド:TBMDExecuteThread; VARデータ:ポインタ;パーセントは整数)オブジェクトの、
  TBMDThreadSynchroNotifyEvent =手順(送信者:TBMDThread;スレッド:TBMDExecuteThread)オブジェクトの、
  TBMDThreadSynchroDataNotifyEvent =プロシージャオブジェクトの(送信者:TBMDThread;:;スレッドTBMDExecuteThread VARデータポインタ)。

  {TBMDExecuteThreadクラス}
  TBMDExecuteThread =クラス(のTThread)
  民間
    {プライベート宣言}
  保護されました
    {保護宣言}
    ThreadOwner:TBMDThread。
    信頼された:ポインタ;
    FNotifyEvent:TNotifyEvent;
    FThreadNotifyEvent:TBMDThreadSynchroNotifyEvent。
    FThreadDataNotifyEvent:TBMDThreadSynchroDataNotifyEvent。
    updateData:ポインタ;
    手順()を実行し、オーバーライド;
  公衆
    {公開宣言}
    PercentProgress:整数;
    コンストラクタ(:; AUpdateData TBMDThread:AThreadOwnerポインタ)を作成します。バーチャル;
    手順DoNotifySynchro;
    手順DoThreadNotifySynchro;
    手順DoThreadNotifySynchroData;
    手順同期(SynchroEvent:TNotifyEvent)。過負荷;
    手順同期(SynchroEvent:TBMDThreadSynchroNotifyEvent)。過負荷;
    手順同期(SynchroEvent:TBMDThreadSynchroDataNotifyEvent;データ:ポインタ); 過負荷;
    // folowing二つの機能が廃止され、将来的に使用すべきではありません!
    //廃止されました!これ以上は使用しないでください!>>>>
    手順同期(SynchroEvent:TBMDThreadNotifyEvent)。過負荷;
    手順同期(SynchroEvent:TBMDThreadDataNotifyEvent;データ:ポインタ); 過負荷;
    // <<<廃止されました!これ以上は使用しないでください!
    プロパティは終了します。
  終わり;

  {TBMDThreadクラス}
  TBMDThreadBase =クラス(TComponentの)
  民間
    FOnUpdate:TBMDThreadUpdateNotifyEvent。
    FOnStart:TBMDThreadDataNotifyEvent。
    FOnTerminate:TBMDThreadDataNotifyEvent。
    FThreadGroup:TBMDThreadGroup。
    FUpdatePriority:整数;
  保護されました
    UpdateCriticalSection:TCriticalSection。
    機能GetRuning():ブール; バーチャル; 概要;
    手順SetThreadGroup(AThreadGroup:TBMDThreadGroup)。
    手順ReportStarted(スレッドグループ:TBMDThreadGroup)。バーチャル; 概要;
    手順ReportTerminated(スレッドグループ:TBMDThreadGroup)。バーチャル; 概要;
    機能AddMe(AThreadGroup:TBMDThreadGroup):ブール; バーチャル; 概要;
    手順RemoveMe(AThreadGroup:TBMDThreadGroup)。バーチャル; 概要;
  公衆
    コンストラクタ(所有者:TComponentの)を作成します。オーバーライド;
    デストラクタ破壊します。オーバーライド;
    手順[スタート](); 過負荷; バーチャル; 概要;
    手順スタート(データ:ポインタ); 過負荷; バーチャル; 概要;
    手続きの停止(); バーチャル; 概要;
    手順)(サスペンド。バーチャル; 概要;
    手順の再開()。バーチャル; 概要;
  公衆
    プロパティruningて:ブールGetRuningを読みます。
    プロパティスレッドグループ:TBMDThreadGroupはFThreadGroup書き込みSetThreadGroupを読みます。
    プロパティUpdatePriority:整数FUpdatePriority書き込みFUpdatePriorityデフォルト0を読んで。
    プロパティにonUpdate:TBMDThreadUpdateNotifyEventはFOnUpdate書き込みFOnUpdateを読みます。
    プロパティのOnStart:TBMDThreadDataNotifyEventはFOnStart書き込みFOnStartを読みます。
    プロパティOnTerminate:TBMDThreadDataNotifyEventはFOnTerminate書き込みFOnTerminateを読みます。
  終わり;

  {TBMDThreadクラス}
  TBMDThread =クラス(TBMDThreadBase)
  保護されました
    FUpdateTimer:thour。
    FOnExecute:TBMDThreadDataNotifyEvent。
    FExecuteThread:TBMDExecuteThread。
    FPriority:TThreadPriority。
    FUpdateEnabled:ブール。
    FInterrupted:ブール。
    手順OnUpdateTimer(送信者:TObjectを); バーチャル;
    手順()を実行し、バーチャル;
    手順OnThreadTerminate(送信者:TObjectを); バーチャル;
    手順OnThreadTerminateClose(送信者:TObjectを); バーチャル;
    手順ReportStarted(スレッドグループ:TBMDThreadGroup)。オーバーライド;
    手順ReportTerminated(スレッドグループ:TBMDThreadGroup)。オーバーライド;
    機能AddMe(AThreadGroup:TBMDThreadGroup):ブール; オーバーライド;
    手順RemoveMe(AThreadGroup:TBMDThreadGroup)。オーバーライド;
    手順SetTimeInterval(時間間隔:枢機卿)。
    機能GetTimeInterval():枢機卿。
    手順のsetpriority(値:TThreadPriority)。
    機能GetPriority():TThreadPriority。
    機能GetRuning():ブール; オーバーライド;
    機能GetEmptyEntry():TPersistentは、
    手順SetUpdateEnabled(値:ブール値);
  公衆
    コンストラクタ(所有者:TComponentの)を作成します。オーバーライド;
    デストラクタ破壊します。オーバーライド;
    手順[スタート](); 過負荷; オーバーライド;
    手順スタート(データ:ポインタ); 過負荷; オーバーライド;
    手続きの停止(); オーバーライド;
    手順)(サスペンド。オーバーライド;
    手順の再開()。オーバーライド;
    プロパティruningて、
    プロパティ中断:ブールFInterruptedを読みます。
    プロパティのスレッド:TBMDExecuteThreadはFExecuteThreadを読みます。
  公表
    プロパティRefreshInterval:枢機卿はGetTimeInterval書き込みSetTimeIntervalデフォルト100を読み込みます。
    プロパティの優先順位:TThreadPriorityはGetPriorityの書き込みを読んでのsetpriorityデフォルトtpNormal。
    プロパティのThreadGroup;
    プロパティUpdatePriority;
    プロパティは、updateEnabledを:ブールSetUpdateEnabled FUpdateEnabled書き込みを読んで、 
    プロパティSynchroMethods:TPersistentははGetEmptyEntryを読みます。
    プロパティOnExecuteイベント:TBMDThreadDataNotifyEventはFOnExecute書き込みFOnExecuteを読みます。
    プロパティにonUpdate;
    プロパティのOnStart;
    プロパティOnTerminate;
  終わり;

  TBMDThreadGroup =クラス(TBMDThreadBase)
  保護されました
    ThreadItemsList:TListの。
    ThreadsList:TListの。
    FOnThreadUpdate:TBMDThreadUpdateNotifyEvent。
    FOnThreadStart:TBMDThreadDataNotifyEvent。
    FOnThreadTerminate:TBMDThreadDataNotifyEvent。
    //クリティカルセクションによって保護されました
    FCountRuning:整数;
    機能GetRuning():ブール; オーバーライド;
    GetCountRuning機能():整数; バーチャル;
    機能GetThreadItemsCount():整数;
    関数GetThreadItems(インデックス:整数):TBMDThreadBase。
    機能GetThreadsCount():整数;
    関数GetThreads(インデックス:整数):TBMDThread。
    手順ReportStarted(スレッドグループ:TBMDThreadGroup)。オーバーライド;
    手順ReportTerminated(スレッドグループ:TBMDThreadGroup)。オーバーライド;
    機能AddMe(AThreadGroup:TBMDThreadGroup):ブール; オーバーライド;
    手順RemoveMe(AThreadGroup:TBMDThreadGroup)。オーバーライド;
    機能LinkedToMe(ThreadBase:TBMDThreadBase):ブール;
  公衆
    コンストラクタ(所有者:TComponentの)を作成します。オーバーライド;
    デストラクタ破壊します。オーバーライド;
    手順[スタート](); 過負荷; オーバーライド;
    手順スタート(データ:ポインタ); 過負荷; オーバーライド;
    手続きの停止(); オーバーライド;
    手順)(サスペンド。オーバーライド;
    手順の再開()。オーバーライド;
    機能AddThread(AThread:TBMDThread):ブール;
    手順RemoveThread(AThread:TBMDThread)。
    機能AddThreadGroup(AThreadGroup:TBMDThreadGroup):ブール;
    手順RemoveThreadGroup(AThreadGroup:TBMDThreadGroup)。
    手順ThreadStarted(送信者:TObjectを;スレッド:TBMDExecuteThread; VARデータ:ポインタ);
    手順ThreadUpdate(送信者:TObjectを;スレッド:TBMDExecuteThread; VARデータ:ポインタ; AUpdatePriority:整数; PercentProgres:整数);
    手順ThreadTerminated(送信者:TObjectを;スレッド:TBMDExecuteThread; VARデータ:ポインタ);
    
  公衆
    プロパティruningて、
    プロパティCountRuning:整数GetCountRuningを読みます。
    プロパティThreadItemsCount:整数GetThreadItemsCountを読みます。
    プロパティThreadItems [インデックス:整数]:TBMDThreadBaseはGetThreadItemsを読みます。
    プロパティThreadsCount:整数GetThreadsCountを読みます。
    プロパティスレッド[インデックス:整数]:TBMDThreadはGetThreadsを読みます。

  公表
    プロパティのThreadGroup;
    プロパティUpdatePriority;
    プロパティにonUpdate;
    プロパティのOnStart;
    プロパティOnTerminate;
    プロパティOnThreadUpdate:TBMDThreadUpdateNotifyEventはFOnThreadUpdate書き込みFOnThreadUpdateを読みます。
    プロパティOnThreadStart:TBMDThreadDataNotifyEventはFOnThreadStart書き込みFOnThreadStartを読みます。
    プロパティOnThreadTerminate:TBMDThreadDataNotifyEventはFOnThreadTerminate書き込みFOnThreadTerminateを読みます。
  終わり;

実装

  

 

おすすめ

転載: www.cnblogs.com/epinn/p/12234605.html