スレッド オブジェクトを定義する
マルチスレッド アプリケーションの構築 への移動
スレッド オブジェクトを定義するには:
- [ファイル|新規作成|その他|Delphi プロジェクト|Delphi ファイル]または[ファイル|新規作成|その他|C++Builder ファイル]を選択し、[スレッド オブジェクト]アイコンをダブルクリックします。[スレッド オブジェクトの新規作成]ダイアログ ボックスが表示されます。
- クラス名を、たとえば「TMyThread」などと入力します。
- オプションで、[名前付きスレッド]チェック ボックスをオンにし、スレッドの名前を、たとえば「MyThreadName」などと入力します。
ヒント: [名前付きスレッド]をオンにして[スレッド名]フィールドに名前を入力すると、デバッグ時にスレッドを追跡しやすくなります。
- [OK]をクリックします。
コード エディタにスレッド オブジェクトのスケルトン コードが表示されます。
スレッド クラスに TMyThread という名前を付けた場合、新しいユニットとして生成されたコードは次のようになります。
unit Unit1;
interface
uses
Classes;
type
TMyThread = class(TThread)
private
{ Private declarations }
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 TMyThread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ TMyThread }
procedure TMyThread.Execute;
begin
{ Place thread code here }
end;
end.
スレッドの名前を追加すると、TThread のクラス メソッド NameThreadForDebugging の呼び出しが TThread の Execute 手続きに追加されます。
unit Unit1;
interface
uses
Classes;
type
TMyThread = class(TThread)
private
{ Private declarations }
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 TMyThread.UpdateCaption;
begin
Form1.Caption := 'Updated in a thread';
end; }
{ TMyThread }
procedure TMyThread.Execute;
begin
NameThreadForDebugging('My Cool Thread');
{ Place thread code here }
end;
end.
// Unit1.cpp
#include "Unit3.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 mythread::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
__fastcall TMyThread::TMyThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
void __fastcall TMyThread::Execute()
{
TThread::NameThreadForDebugging("My Cool Thread");
//---- Place thread code here ----
}