|
||
解説: 特定の処理で 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; } //------------------------------------------------------------------- |