drivers/can_ixxat_win32/async_access_que.h
changeset 252 b0dd37421d28
child 255 7b9f36dbfe5f
equal deleted inserted replaced
251:cab66ef3e68e 252:b0dd37421d28
       
     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    };