○BCBでのスレッドの作成

HANDLE hThread;
DWORD ThreadId;

unsigned long __stdcall ThreadFunc(void *Arg){
   int a=0;
   while(1){
      a++;
      Form1->Edit1->Text = a;//フォーム上のEdit1に値を書き込む
   }
   return 0;
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
        //スレッドの開始
        hThread=CreateThread(NULL,0,ThreadFunc,0,0,&ThreadId);
}

void __fastcall TForm1::Button2Click(TObject *Sender)
{
        //スレッドの停止
        TerminateThread(hThread,ThreadId);
}


○クリティカルセッション(シンクロナイズメソッド)の実現


HANDLE     hIOMutex = CreateMutex (NULL, FALSE, NULL);
//↑グローバルで宣言
void Sincronaized(char*str){
     WaitForSingleObject( hIOMutex, INFINITE );
     //処理内容
     Sleep(100);

     Form1->Edit1->Text = str;//フォーム上のEdit1に値を書き込む

     Sleep(100);

     Form1->Edit1->Text = Form1->Edit1->Text +" : "+str;
     ReleaseMutex( hIOMutex);
}

HANDLE hThread;
DWORD ThreadId;

unsigned long __stdcall ThreadFunc(void *Arg){
   while(1){
      Sincronaized((char*)Arg);
   }
   return 0;
}


void __fastcall TForm1::Button1Click(TObject *Sender)
{
        //スレッドの開始
        CreateThread(NULL,0,ThreadFunc,"test",0,NULL);
        CreateThread(NULL,0,ThreadFunc,"Inaba",0,NULL);
}


▲トップページ > その他