//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "CppTestForm.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TCppTest *CppTest; //--------------------------------------------------------------------------- __fastcall TCppTest::TCppTest(TComponent* Owner) : TForm(Owner) { } void __fastcall TCppTest::FormCreate(TObject *Sender) { Thread = std::auto_ptr<TStopStartThread>(new TStopStartThread); UntilFlag = std::auto_ptr<TEvent>(new TEvent(NULL, true, false, NULL)); WaitThread = NULL; } // TCppTest::FormCreate void __fastcall TCppTest::BeepBtnClick(TObject *Sender) { RunInThread(Beep); } // TCppTest::BeepBtnClick void __fastcall TCppTest::WaitBtnClick(TObject *Sender) { WaitBtn->Enabled = false; WaitForThread(Pause); WaitBtn->Enabled = true; } // TCppTest::WaitBtnClick void __fastcall TCppTest::MsgWaitBtnClick(TObject *Sender) { MsgWaitBtn->Enabled = false; MsgWaitForThread(WaitThread, Pause); MsgWaitBtn->Enabled = true; } // TCppTest::MsgWaitBtnClick void __fastcall TCppTest::StopStartWaitBtnClick(TObject *Sender) { StopStartWaitBtn->Enabled = false; Thread->Run(Pause, NULL, false); StopStartWaitBtn->Enabled = true; } // TCppTest::StopStartWaitBtnClick void __fastcall TCppTest::StopStartMsgWaitBtnClick(TObject *Sender) { // try { StopStartMsgWaitBtn->Enabled = false; Thread->Run(Pause); StopStartMsgWaitBtn->Enabled = true; // } catch (EAbort&) { Close(); } } // TCppTest::StopStartMsgWaitBtnClick void __fastcall TCppTest::InfiniteWaitBtnClick(TObject *Sender) { // try { InfiniteWaitBtn->Enabled = false; Thread->Run(InfinitePause); InfiniteWaitBtn->Enabled = true; // } catch (EAbort&) { Close(); } } // TCppTest::InfiniteWaitBtnClick void __fastcall TCppTest::EventWaitBtnClick(TObject *Sender) { EventWaitBtn->Enabled = false; UntilBtn->Enabled = true; UntilFlag->ResetEvent(); MsgWaitForSingleObject((HANDLE) UntilFlag->Handle); EventWaitBtn->Enabled = true; UntilBtn->Enabled = false; } // TCppTest::EventWaitBtnClick void __fastcall TCppTest::UntilBtnClick(TObject *Sender) { UntilFlag->SetEvent(); } // TCppTest::UntilBtnClick void __fastcall TCppTest::SpawnBtnClick(TObject *Sender) { SpawnBtn->Enabled = false; MsgWaitForSingleObject(SpawnProcess("test.bat").hProcess); SpawnBtn->Enabled = true; } // TCppTest::SpawnBtnClick void __fastcall TCppTest::wmClose(TMessage Message) { if (WaitThread != NULL) WaitThread->AbortThread(); if (UntilBtn->Enabled) UntilFlag->SetEvent(); if (Thread->Waiting) Thread->AbortThread(); Close(); } // TCppTest::wmClose //---------------------------------------------------------------------------