view src/win32/7zip/7z/CPP/7zip/Common/VirtThread.cpp @ 1:f9f4f1b99eed

importing src directory
author Robert McIntyre <rlm@mit.edu>
date Sat, 03 Mar 2012 10:31:27 -0600
parents
children
line wrap: on
line source
1 // VirtThread.cpp
3 #include "StdAfx.h"
5 #include "VirtThread.h"
7 static THREAD_FUNC_DECL CoderThread(void *p)
8 {
9 for (;;)
10 {
11 CVirtThread *t = (CVirtThread *)p;
12 t->StartEvent.Lock();
13 if (t->ExitEvent)
14 return 0;
15 t->Execute();
16 t->FinishedEvent.Set();
17 }
18 }
20 WRes CVirtThread::Create()
21 {
22 RINOK(StartEvent.CreateIfNotCreated());
23 RINOK(FinishedEvent.CreateIfNotCreated());
24 StartEvent.Reset();
25 FinishedEvent.Reset();
26 ExitEvent = false;
27 if (Thread.IsCreated())
28 return S_OK;
29 return Thread.Create(CoderThread, this);
30 }
32 void CVirtThread::Start()
33 {
34 ExitEvent = false;
35 StartEvent.Set();
36 }
38 CVirtThread::~CVirtThread()
39 {
40 ExitEvent = true;
41 if (StartEvent.IsCreated())
42 StartEvent.Set();
43 Thread.Wait();
44 }