This week only. Pastebin PRO Accounts Christmas Special! Don't miss out!Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Oct 31st, 2013  |  syntax: C++  |  size: 1.12 KB  |  views: 50  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
This paste has a previous version, view the difference. Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <windows.h>
  2.  
  3. class CriticalSection
  4. {
  5. public:
  6.         CriticalSection()
  7.         {
  8.                 InitializeCriticalSection(&m_cs);
  9.         }
  10.         ~CriticalSection()
  11.         {
  12.                 DeleteCriticalSection(&m_cs);
  13.         }
  14.         void enterCriticalSection()
  15.         {
  16.                 EnterCriticalSection(&m_cs);
  17.         }
  18.         void leaveCriticalSection()
  19.         {
  20.                 LeaveCriticalSection(&m_cs);
  21.         }
  22. protected:
  23. private:
  24.         CRITICAL_SECTION m_cs;
  25. };
  26.  
  27. template<class T>
  28. class SharedMemory
  29. {
  30. public:
  31.         SharedMemory() { m_empty = true;}
  32.         ~SharedMemory() {}
  33.  
  34.         T getData(bool& validreturn)
  35.         {
  36.                 m_cs.enterCriticalSection();
  37.                 if (m_empty)
  38.                 {
  39.                         m_cs.leaveCriticalSection();
  40.                         validreturn = false;
  41.                         return T();
  42.                 }
  43.                 //Data in the shared memory
  44.                 T data = m_data;
  45.                 m_empty = true;
  46.                 m_cs.leaveCriticalSection();
  47.                 validreturn = true;
  48.                 return data;
  49.         }
  50.         bool setData(const T& data)
  51.         {
  52.                 m_cs.enterCriticalSection();
  53.                 if (!m_empty)
  54.                 {
  55.                         m_cs.leaveCriticalSection();
  56.                         return false;
  57.                 }
  58.                 //Shared memory is empty so fill it
  59.                 m_data = data;
  60.                 m_empty = false;
  61.                 m_cs.leaveCriticalSection();
  62.                 return true;
  63.         }
  64. protected:
  65. private:
  66.         T m_data;
  67.         bool m_empty;
  68.         CriticalSection m_cs;
  69. };
clone this paste RAW Paste Data