Mercurial > vba-linux
comparison 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 |
comparison
equal
deleted
inserted
replaced
0:8ced16adf2e1 | 1:f9f4f1b99eed |
---|---|
1 // VirtThread.cpp | |
2 | |
3 #include "StdAfx.h" | |
4 | |
5 #include "VirtThread.h" | |
6 | |
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 } | |
19 | |
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 } | |
31 | |
32 void CVirtThread::Start() | |
33 { | |
34 ExitEvent = false; | |
35 StartEvent.Set(); | |
36 } | |
37 | |
38 CVirtThread::~CVirtThread() | |
39 { | |
40 ExitEvent = true; | |
41 if (StartEvent.IsCreated()) | |
42 StartEvent.Set(); | |
43 Thread.Wait(); | |
44 } | |
45 |