ホーム
|
アプリケーション | Tips | ダウンロード | プログラム
| コラム

CBアプリ工房


Tips >   

スレッドを使う 

更新 : 2010/03/13

 



解説:
特定の処理で CPU が占領される時、スレッドを使って、それらの処理をバックグラウンドで行わせると、効率よくプログラムが動くようになります。
C++Builder では、TThread オブジェクトを使うことでこうした処理が可能です。

使用例:
以下の例では、1 秒ごとにビープ音を出力しています。スレッド処理をすることで他のコンポーネントへのアクセスがスムーズに行えます。

コンポーネントは、 Button を適当に配置するだけです。

コーディングは、"Unit1.h" ファイルに TTestThread のクラスを宣言します。ついで、スレッドの実体を記述した Execute メソッドも宣言しておきます。

"Unit1.cpp" ファイルにはスレッドオブジェクトを指すポインタ thread を宣言しておきます。

TTestThread のコンストラクタではスレッドの解放と再開を行います。
スレッドの終了時にオブジェクトを破棄させるために、FreeOnTerminate プロパティを true に設定しておきます。Resume は呼び出されると中止されていたメソッドの実行が再開されます。

Execute は、スレッドが実行されたとき呼び出されるコードです。1 秒ごとにビープ音を鳴らしています。この動作は、Terminated が true になるまで続けられます。

Button1 の OnClick で、スレッドが開始されます。
スレッドのおかげで、キャプションバーを掴んでのフォーム移動がストレスなく行えます。

"Unit1.h"
//-------------------------------------------------------------------
class TTestThread : public TThread
{
private:
    void __fastcall Execute(void);
public:
    __fastcall TTestThread(void);
};
//-------------------------------------------------------------------

"Unit1.cpp"
TTestThread *thread;
//-------------------------------------------------------------------
__fastcall TTestThread::TTestThread(void) : TThread(true)
{
    // スレッドの終了後にオブジェクトを解放
    FreeOnTerminate = true;
    // スレッドを再開
    Resume();
}
//-------------------------------------------------------------------
void __fastcall TTestThread::Execute()
{
    // スレッドが終了していない間
    while (!Terminated){
        // ビープ音を鳴らす
        MessageBeep(0xFFFFFFFF);
        // 1 秒間プログラムを停止
        Sleep(1000);
    }
}    
//-------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    // バックグラウンドスレッドを開始する
    thread = new TMyThread;
}
//-------------------------------------------------------------------



[ ホーム | ページトップ | ブック | リンク | サイトマップ ]
Copyright(c) 2003 Shibu All rights reserved.