TEventを使用するとスレッドからイベントを通知することができます。
TEvent.SetEvent メソッドを呼び出すと、イベントが発生したことや目的の状態に達したことを通知できます。
TEvent.WaitFor メソッドは、イベントのシグナルが通知されるまで待機します。
複数のスレッドが同じTEventのインスタンスを使いTEvent.WaitForで待機しているとき、 TEvent.SetEvent()によって実行されるスレッドは1つだけです。
class TMyThread : public TThread
{
private:
TEvent* FEvent;
protected:
void __fastcall Execute()
{
for (int i = 0; i < 1000; ++i)
{
std::cout << "Nice!";
};
FEvent->SetEvent();
}
public:
__fastcall TMyThread(bool CreateSuspended, TEvent* Event)
: TThread(CreateSuspended), FEvent(Event) {};
};
int _tmain(int argc, _TCHAR* argv[])
{
TEvent* event = new TEvent(false);
TMyThread* thread = new TMyThread(false, event);
//10秒間スレッドからのイベントの通知を待つ
if (event->WaitFor(10000) == wrSignaled)
{
//スレッドからの通知があった
std::cout << "END";
}
else
{
//スレッドからの通知がない、または時間切れ
std::cout << "ERROR";
}
return 0;
}