サンプルプログラムのソースファイル

 

  Unit1.cpp ファイル

 Unit1.h  ファイル

 Unit2.cpp ファイル

  Unit2.h   ファイル

 

 

Unit1.cpp ファイル

//---------------------------------------------------------------------------

#ifndef Unit1H

#define Unit1H

#include "Unit2.h"

//---------------------------------------------------------------------------

#include <Classes.hpp>

#include <Controls.hpp>

#include <StdCtrls.hpp>

#include <Forms.hpp>

#include <Menus.hpp>

//---------------------------------------------------------------------------

class TForm1 : public TForm

{

__published:        // IDE 管理のコンポーネント

    TButton *Button1;

    TButton *Button2;

    TButton *Button3;

    TButton *Button4;

    TMemo *Memo1;

    TMainMenu *MainMenu1;

    TMenuItem *Exit1;

    void __fastcall Button1Click(TObject *Sender);

    void __fastcall Button2Click(TObject *Sender);

    void __fastcall Button3Click(TObject *Sender);

    void __fastcall Button4Click(TObject *Sender);

    void __fastcall Exit1Click(TObject *Sender);

    void __fastcall FormCloseQuery(TObject *Sender, bool &CanClose);

private:  // ユーザー宣言

    RunThread* mRunThread;                  //スレッドクラスのデータメンバーの宣言

public:                 // ユーザー宣言

    __fastcall TForm1(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TForm1 *Form1;

//---------------------------------------------------------------------------

#endif

 

 

  Unit1.h ファイル

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

 

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

    : TForm(Owner)

{

    //初期設定

    Button2->Enabled = false;                //中止ボタンを押せなくする

    Button3->Enabled = false;                //一時停止ボタンを押せなくする

    Button4->Enabled = false;                //再開ボタンを押せなくする

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

    //開始のボタンが押された場合

    mRunThread = new RunThread(true);        //スレッドを生成、同時にスレッドを実行しないかどうか

    mRunThread->FreeOnTerminate = true;      //スレッド処理終了後スレッドオブジェクトを開放する

    mRunThread->Resume();                    //スレッドを実行する

 

    Button1->Enabled = false;

    Button2->Enabled = true;

    Button3->Enabled = true;

    Button4->Enabled = false;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

    //中止のボタンが押された場合

    mRunThread->Terminate();                 //スレッドを終了させる要求を出す

    if(mRunThread->Suspended)                //スレッドが一時停止しているかどうか

        delete mRunThread;                   //スレッドのメモリを開放する

 

    Button1->Enabled = true;

    Button2->Enabled = false;

    Button4->Enabled = false;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

    //一時停止のボタンが押された場合

    mRunThread->Suspend();                   //スレッドが一時停止する要求を出す。

 

    Button3->Enabled = false;

    Button4->Enabled = true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

    //再開のボタンが押された場合

    mRunThread->Resume();                    //スレッドを実行する

 

    Button1->Enabled = false;

    Button3->Enabled = true;

    Button4->Enabled = false;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Exit1Click(TObject *Sender)

{

    //ツールバーの終了が押された場合

    Close();                                 //プログラムを終了する

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)

{

    //プログラムの終了処理

    if(Button1->Enabled==false){        //スレッドを実行しているかどうか

    mRunThread->Terminate();                //スレッドを終了させる要求を出す

    if(mRunThread->Suspended)                //スレッドが停止しているかどうか

        delete mRunThread;                   //スレッドのメモリを開放する

}}

//---------------------------------------------------------------------------

 

 

 Unit2.cpp ファイル

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"                          //スレッドを呼び出すメイン関数のヘッダを追加

#include "Unit2.h"

#pragma package(smart_init)

//---------------------------------------------------------------------------

//   注意: VCL オブジェクトのメソッドとプロパティを使用するには, Synchronize

//         を使ったメソッド呼び出しでなければなりません。次に例を示します。

//

//      Synchronize(UpdateCaption);

//

//   ここで, UpdateCaption は次のように記述できます。

//

//      void __fastcall RunThread::UpdateCaption()

//      {

//        Form1->Caption = "スレッドから書き換えました";

//      }

//---------------------------------------------------------------------------

__fastcall RunThread::RunThread(bool CreateSuspended)

    : TThread(CreateSuspended)

{

}

//---------------------------------------------------------------------------

void __fastcall RunThread::Execute()

{

    //---- スレッドのコードをここに記述 ----

    Form1->Memo1->Lines->Clear();                   //実行前にMemo1をクリア

    i = 0;                                          //変数iの初期化

    for(i=0;i<=5000;i++){

        if(Terminated)                              //スレッドの終了要求がなされているかどうか

            break;                                  //終了要求がなされていればスレッドを抜ける

        Form1->Memo1->Lines->Add(AnsiString(i));    //Memo1iの値を表示

    }

    Form1->Button1->Enabled = true;

    Form1->Button2->Enabled = false;

    Form1->Button3->Enabled = false;

    Form1->Button4->Enabled = false;

}

//---------------------------------------------------------------------------

 

 

  Unit2.h ファイル

//---------------------------------------------------------------------------

#ifndef Unit2H

#define Unit2H

//---------------------------------------------------------------------------

#include <Classes.hpp>

//---------------------------------------------------------------------------

class RunThread : public TThread

{

private:

    int i;                                        //スレッド内の変数等の宣言

protected:

    void __fastcall Execute();

public:

    __fastcall RunThread(bool CreateSuspended);

};

//---------------------------------------------------------------------------

#endif

 

 

    文章の最初に戻る