Top / Programming / C++Builder / C++Builderでマルチスレッドプログラミング / スレッドの使い方

スレッドの使い方

スレッドクラスを作成する

  1. C++Builderのメニューから「ファイル」→「新規作成」→「その他」を選択します。
  2. 項目カテゴリから「C++Builderファイル」を選択します。
  3. 「スレッドオブジェクト」を選択し「OK」ボタンを押します。
  4. クラス名を入力し「OK」ボタンを押します。

スレッドクラスのひな形が作成されます。

スレッドを実行する

Execute()に実行する処理を記述します。

void __fastcall TMyThread::Execute()
{
  for (int i = 0; i < 1000; i++) 
  {
    std::cout << "Nice!";
  }
}

スレッドクラスのインスタンスを作成し、起動します。

int _tmain(int argc, _TCHAR* argv[])
{
  //"Nice!"を出力するTMyThreadを生成して起動する
  TMyThread* thread = new TMyThread(false);
  //メインスレッドでは"Good!"を出力する
  for (int i = 0; i < 1000; i++)
  {
    std::cout << "Good!";
  }
  Sleep(5000);
  return 0;
}

TThreadクラスのコンストラクタの引数CreateSuspendedにfalseを指定すると、インスタンス作成後、Execute()メソッドがすぐに呼び出されます。

スレッドを自動的に実行するのではなく明示的に実行する場合は、コンストラクタの引数CreateSuspendedにtrueを指定し、 TThread.Resumeメソッドで実行します。

※C++Builder 2010から、TThread.Resumeメソッドは非推奨になりました。代わりにTThread.Startメソッドを使用します。

int _tmain(int argc, _TCHAR* argv[])
{
  #インスタンスの作成
  TMyThread* thread = new TMyThread(true);
  #スレッドの実行
  thread->Resume();
  for (int i = 0; i < 1000; i++)
  {
    std::cout << "Good!";
  }
  Sleep(5000);
  return 0;
}

メインスレッドが終了すると、すべてのスレッドが終了します。

スレッドの一時停止

TThread.Suspendメソッドを使うと、実行中のスレッドを一時停止することができます。

一時停止したスレッドを再実行するには、TThread.Resumeメソッドで呼び出します。

※C++Builder 2010から、TThread.Resumeメソッドは非推奨になりました。代わりにTThread.Startメソッドを使用します。

int _tmain(int argc, _TCHAR* argv[])
{
  //スレッドの実行
  TMyThread* thread = new TMyThread(false);
  //スレッドの一時停止
  thread->Suspend();
  for (int i = 0; i < 1000; i++)
  {
    std::cout << "Good!";
  }
  //スレッドの再実行
  thread->Resume();
  Sleep(5000);
  return 0;
}

スレッドオブジェクトの破棄

TThread.FreeOnTerminateプロパティがtrueの場合、処理が終了すると自動的に破棄されます。

TThread.FreeOnTerminateプロパティがfalseの場合は、明示的に破棄する必要があります。

スレッドが終了したかどうかを調べる

TThread.Finished プロパティがtrueの場合は、スレッドは終了しています。

更新履歴