1*f6dc9357SAndroid Build Coastguard Worker // VirtThread.h 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_VIRT_THREAD_H 4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_VIRT_THREAD_H 5*f6dc9357SAndroid Build Coastguard Worker 6*f6dc9357SAndroid Build Coastguard Worker #include "../../Windows/Synchronization.h" 7*f6dc9357SAndroid Build Coastguard Worker #include "../../Windows/Thread.h" 8*f6dc9357SAndroid Build Coastguard Worker 9*f6dc9357SAndroid Build Coastguard Worker struct CVirtThread 10*f6dc9357SAndroid Build Coastguard Worker { 11*f6dc9357SAndroid Build Coastguard Worker NWindows::NSynchronization::CAutoResetEvent StartEvent; 12*f6dc9357SAndroid Build Coastguard Worker NWindows::NSynchronization::CAutoResetEvent FinishedEvent; 13*f6dc9357SAndroid Build Coastguard Worker NWindows::CThread Thread; 14*f6dc9357SAndroid Build Coastguard Worker bool Exit; 15*f6dc9357SAndroid Build Coastguard Worker ~CVirtThreadCVirtThread16*f6dc9357SAndroid Build Coastguard Worker virtual ~CVirtThread() { WaitThreadFinish(); } 17*f6dc9357SAndroid Build Coastguard Worker void WaitThreadFinish(); // call it in destructor of child class ! 18*f6dc9357SAndroid Build Coastguard Worker WRes Create(); 19*f6dc9357SAndroid Build Coastguard Worker WRes Start(); 20*f6dc9357SAndroid Build Coastguard Worker virtual void Execute() = 0; WaitExecuteFinishCVirtThread21*f6dc9357SAndroid Build Coastguard Worker WRes WaitExecuteFinish() { return FinishedEvent.Lock(); } 22*f6dc9357SAndroid Build Coastguard Worker }; 23*f6dc9357SAndroid Build Coastguard Worker 24*f6dc9357SAndroid Build Coastguard Worker #endif 25