xref: /aosp_15_r20/external/lzma/CPP/7zip/Common/VirtThread.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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