// VirtThread.h #ifndef __VIRT_THREAD_H #define __VIRT_THREAD_H #include "../../Windows/Synchronization.h" #include "../../Windows/Thread.h" struct CVirtThread { NWindows::NSynchronization::CAutoResetEvent StartEvent; NWindows::NSynchronization::CAutoResetEvent FinishedEvent; NWindows::CThread Thread; bool Exit; ~CVirtThread() { WaitThreadFinish(); } void WaitThreadFinish(); // call it in destructor of child class ! WRes Create(); void Start(); virtual void Execute() = 0; void WaitExecuteFinish() { FinishedEvent.Lock(); } }; #endif