equal
deleted
inserted
replaced
|
1 // thread safe que |
|
2 // Tochinski Leonid, Chatten Associayes, Inc. |
|
3 #pragma once |
|
4 #include <deque> |
|
5 #include "AutoReleaseCS.h" |
|
6 |
|
7 template<typename type> |
|
8 class async_access_que |
|
9 { |
|
10 public: |
|
11 async_access_que() |
|
12 { |
|
13 ::InitializeCriticalSection(&m_cs); |
|
14 } |
|
15 ~async_access_que() |
|
16 { |
|
17 ::DeleteCriticalSection(&m_cs); |
|
18 } |
|
19 |
|
20 void append(const type& data) |
|
21 { |
|
22 AutoReleaseCS acs(m_cs); |
|
23 m_data.push_back(data); |
|
24 } |
|
25 |
|
26 bool extract_top(type& data) |
|
27 { |
|
28 AutoReleaseCS acs(m_cs); |
|
29 if (m_data.empty()) |
|
30 return false; |
|
31 data = m_data.front(); |
|
32 m_data.pop_front(); |
|
33 return true; |
|
34 } |
|
35 |
|
36 void clear() |
|
37 { |
|
38 AutoReleaseCS acs(m_cs); |
|
39 m_data.clear(); |
|
40 } |
|
41 |
|
42 protected: |
|
43 std::deque<type> m_data; |
|
44 CRITICAL_SECTION m_cs; |
|
45 }; |