スレッド オブジェクトの定義

提供: RAD Studio
移動先: 案内検索

スレッド オブジェクトの定義:インデックス への移動


大半のアプリケーションの場合、スレッド オブジェクトを使用して、アプリケーションにおける実行スレッドを表すことができます。スレッド オブジェクトには、一般に必要とされるスレッドの使い方がカプセル化されているので、マルチスレッド アプリケーションを簡単に作成できるようになります。

メモ: スレッド オブジェクトでは、スレッドのセキュリティ属性やスタック サイズをプログラマが制御することはできません。これらを制御する必要がある場合は、BeginThread 関数を使用しなければなりません。BeginThread を使用する場合でも、スレッド同期用のオブジェクトやメソッド(「スレッドの調整」を参照)の一部を活用することができます。

アプリケーションでスレッド オブジェクトを使用する(および Classes.TThread の下位クラスを作成する)には:

  1. 次のどちらかを選択します。
    • [ファイル|新規作成|その他...|Delphi プロジェクト|Delphi ファイル|スレッド オブジェクト]
    • [ファイル|新規作成|その他...|C++Builder プロジェクト|C++Builder ファイル|スレッド オブジェクト]
  2. [スレッド オブジェクトの新規作成]ダイアログ ボックスで、クラス名(たとえば TMyThread など)を入力します。
  3. [名前付きスレッド]チェック ボックスをオンにし、スレッド名を入力します(VCL アプリケーションのみ)。
  4. [OK]をクリックします。スレッドを実装する新しいユニット ファイルがコード エディタに作成されます。

スレッドの命名の詳細については、「スレッドに名前を付ける」を参照してください。

メモ: クラス名の入力が必要な IDE の大半のダイアログ ボックスとは異なり、[スレッド オブジェクトの新規作成]ダイアログ ボックスでは、ユーザーが入力したクラス名の先頭に自動的に 'T' は付加されません。

出力

自動生成されたユニット ファイルがコード エディタに開かれ、そこに、新規スレッド クラスのスケルトン コードが含まれています。スレッド名が TMyThread の場合、次のようなコードになります。

unit Unit1;
interface
uses
  Classes {$IFDEF MSWINDOWS} , Windows {$ENDIF};
type
  TMyTheadClass = class(TThread)
  protected
    procedure Execute; override;
  end;
implementation
 {
 Important: Methods and properties of objects in visual components can only be
 used in a method called using Synchronize, for example,
     Synchronize(UpdateCaption);
 and UpdateCaption could look like,
   procedure TMyTheadClass.UpdateCaption;
   begin
     Form1.Caption := 'Updated in a thread';
   end;
   
   or
   
   Synchronize(
     procedure
     begin
       Form1.Caption := 'Updated in thread via an anonymous method'
     end
     )
   );
   
 where an anonymous method is passed.
 
 Similarly, the developer can call the Queue method with similar parameters as
 above, instead passing another TThread class as the first parameter, putting
 the calling thread in a queue with the other thread.
   
}
{ TMyTheadClass }
procedure TMyTheadClass.Execute;
begin
  NameThreadForDebugging(mythreadname');
  { Place thread code here }
end;
end.


//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
//   Important: Methods and properties of objects in VCL can only be
//   used in a method called using Synchronize, for example:
//
//      Synchronize(&UpdateCaption);
//
//   where UpdateCaption could look like:
//
//      void __fastcall TMyThreadClass::UpdateCaption()
//      {
//        Form1->Caption = "Updated in a thread";
//      }
//---------------------------------------------------------------------------
__fastcall TMyThreadClass::TMyThreadClass(bool CreateSuspended)
 : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TMyThreadClass::Execute()
{
 NameThreadForDebugging("mythreadname");
 //---- Place thread code here ----
}
//---------------------------------------------------------------------------


この後のステップ

自動生成されたユニット ファイルで以下を行います。

関連項目