1*f6dc9357SAndroid Build Coastguard Worker // VirtThread.cpp 2*f6dc9357SAndroid Build Coastguard Worker 3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h" 4*f6dc9357SAndroid Build Coastguard Worker 5*f6dc9357SAndroid Build Coastguard Worker #include "VirtThread.h" 6*f6dc9357SAndroid Build Coastguard Worker CoderThread(void * p)7*f6dc9357SAndroid Build Coastguard Workerstatic THREAD_FUNC_DECL CoderThread(void *p) 8*f6dc9357SAndroid Build Coastguard Worker { 9*f6dc9357SAndroid Build Coastguard Worker for (;;) 10*f6dc9357SAndroid Build Coastguard Worker { 11*f6dc9357SAndroid Build Coastguard Worker CVirtThread *t = (CVirtThread *)p; 12*f6dc9357SAndroid Build Coastguard Worker t->StartEvent.Lock(); 13*f6dc9357SAndroid Build Coastguard Worker if (t->Exit) 14*f6dc9357SAndroid Build Coastguard Worker return THREAD_FUNC_RET_ZERO; 15*f6dc9357SAndroid Build Coastguard Worker t->Execute(); 16*f6dc9357SAndroid Build Coastguard Worker t->FinishedEvent.Set(); 17*f6dc9357SAndroid Build Coastguard Worker } 18*f6dc9357SAndroid Build Coastguard Worker } 19*f6dc9357SAndroid Build Coastguard Worker Create()20*f6dc9357SAndroid Build Coastguard WorkerWRes CVirtThread::Create() 21*f6dc9357SAndroid Build Coastguard Worker { 22*f6dc9357SAndroid Build Coastguard Worker RINOK_WRes(StartEvent.CreateIfNotCreated_Reset()) 23*f6dc9357SAndroid Build Coastguard Worker RINOK_WRes(FinishedEvent.CreateIfNotCreated_Reset()) 24*f6dc9357SAndroid Build Coastguard Worker // StartEvent.Reset(); 25*f6dc9357SAndroid Build Coastguard Worker // FinishedEvent.Reset(); 26*f6dc9357SAndroid Build Coastguard Worker Exit = false; 27*f6dc9357SAndroid Build Coastguard Worker if (Thread.IsCreated()) 28*f6dc9357SAndroid Build Coastguard Worker return S_OK; 29*f6dc9357SAndroid Build Coastguard Worker return Thread.Create(CoderThread, this); 30*f6dc9357SAndroid Build Coastguard Worker } 31*f6dc9357SAndroid Build Coastguard Worker Start()32*f6dc9357SAndroid Build Coastguard WorkerWRes CVirtThread::Start() 33*f6dc9357SAndroid Build Coastguard Worker { 34*f6dc9357SAndroid Build Coastguard Worker Exit = false; 35*f6dc9357SAndroid Build Coastguard Worker return StartEvent.Set(); 36*f6dc9357SAndroid Build Coastguard Worker } 37*f6dc9357SAndroid Build Coastguard Worker WaitThreadFinish()38*f6dc9357SAndroid Build Coastguard Workervoid CVirtThread::WaitThreadFinish() 39*f6dc9357SAndroid Build Coastguard Worker { 40*f6dc9357SAndroid Build Coastguard Worker Exit = true; 41*f6dc9357SAndroid Build Coastguard Worker if (StartEvent.IsCreated()) 42*f6dc9357SAndroid Build Coastguard Worker StartEvent.Set(); 43*f6dc9357SAndroid Build Coastguard Worker if (Thread.IsCreated()) 44*f6dc9357SAndroid Build Coastguard Worker { 45*f6dc9357SAndroid Build Coastguard Worker Thread.Wait_Close(); 46*f6dc9357SAndroid Build Coastguard Worker } 47*f6dc9357SAndroid Build Coastguard Worker } 48