Advertisement
agrippa1994

CQueue

Jan 22nd, 2013
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.31 KB | None | 0 0
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <queue>
  4. #include <vector>
  5. #include <string>
  6.  
  7. using namespace std;
  8.  
  9. class CQueueMember;
  10. class CMember_1;
  11. class CMember_2;
  12. class CQueue;
  13.  
  14. class CQueueMember
  15. {
  16. public:
  17.     enum eMembers{Member_None,Member_1,Member_2};
  18.  
  19.     CQueueMember(eMembers member) : m_Member(member) {}
  20.     CQueueMember() : m_Member(Member_None) {}
  21.  
  22.     void        SetType(eMembers member) { m_Member = member; }
  23.     eMembers    GetType(){ return m_Member; }
  24. protected:
  25.    
  26. private:
  27.     eMembers    m_Member;
  28. };
  29.  
  30. class CMember_1 : public CQueueMember
  31. {
  32. public:
  33.     string  GetString() { return m_str; }
  34.     void    SetString(string str) { m_str = str; }
  35. private:
  36.     string m_str;
  37. };
  38.  
  39. class CMember_2 : public CQueueMember
  40. {
  41. public:
  42.     void SetInt(int i) { m_i = i; }
  43.     int GetInt() { return m_i;}
  44. private:
  45.     int m_i;
  46. };
  47.  
  48. class CQueue
  49. {
  50. public:
  51.     void AddMember(CQueueMember *Member) { m_Vars.push(Member); }
  52.     void OnTick()
  53.     {
  54.         if(!m_Vars.size()) return;
  55.  
  56.         CQueueMember::eMembers type= m_Vars.front()->GetType() ;
  57.  
  58.         switch(type)
  59.         {
  60.         case CQueueMember::Member_1:
  61.             {
  62.                 CMember_1 *obj = (CMember_1 *)m_Vars.front();
  63.                 printf("%s\n",obj->GetString().c_str());
  64.                 break;
  65.             }
  66.            
  67.         case CQueueMember::Member_2:
  68.             {
  69.                 CMember_2 *obj = (CMember_2 *)m_Vars.front();
  70.                 printf("%d\n",obj->GetInt());
  71.                 break;
  72.             }
  73.         }
  74.  
  75.         m_Vars.pop();
  76.     }
  77. private:
  78.     queue<CQueueMember*> m_Vars;
  79. };
  80.  
  81.  
  82.  
  83. void Thread(void *addr)
  84. {
  85.     struct stThread
  86.     {
  87.         int *br,*broken;
  88.         CQueue *Queue;
  89.     } *thr = (stThread *)addr;
  90.  
  91.     while(! *(thr->br))
  92.     {
  93.         thr->Queue->OnTick();
  94.         Sleep(500);
  95.     }
  96.  
  97.     *(thr->broken) = 1;
  98. }
  99.  
  100. int main()
  101. {
  102.     struct stThread
  103.     {
  104.         int *br,*broken;
  105.         CQueue *Q;
  106.     } Thr ;
  107.  
  108.     CQueue Queue;
  109.     CMember_1 Member1;
  110.     CMember_2 Member2;
  111.     int iBreak=0;
  112.     int iBroken=0;
  113.  
  114.     Member1.SetType(CQueueMember::Member_1);
  115.     Member1.SetString("asdf");
  116.  
  117.     Member2.SetType(CQueueMember::Member_2);
  118.     Member2.SetInt(5);
  119.  
  120.     Thr.Q = &Queue;
  121.     Thr.br = &iBreak;
  122.     Thr.broken = &iBroken;
  123.     CreateThread(0,0,(LPTHREAD_START_ROUTINE)Thread,&Thr,0,0);
  124.  
  125.     while(1)
  126.     {
  127.         if(GetAsyncKeyState('1'))
  128.             Queue.AddMember(&Member1);
  129.         if(GetAsyncKeyState('2'))
  130.             Queue.AddMember(&Member2);
  131.  
  132.         if(GetAsyncKeyState('3'))
  133.         {
  134.             iBreak = 1;
  135.             while(!iBroken);
  136.             return 1;
  137.         }
  138.  
  139.         Sleep(30);
  140.     }
  141.  
  142.     return 1;
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement