Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <iostream>
- #include <queue>
- #include <vector>
- #include <string>
- using namespace std;
- class CQueueMember;
- class CMember_1;
- class CMember_2;
- class CQueue;
- class CQueueMember
- {
- public:
- enum eMembers{Member_None,Member_1,Member_2};
- CQueueMember(eMembers member) : m_Member(member) {}
- CQueueMember() : m_Member(Member_None) {}
- void SetType(eMembers member) { m_Member = member; }
- eMembers GetType(){ return m_Member; }
- protected:
- private:
- eMembers m_Member;
- };
- class CMember_1 : public CQueueMember
- {
- public:
- string GetString() { return m_str; }
- void SetString(string str) { m_str = str; }
- private:
- string m_str;
- };
- class CMember_2 : public CQueueMember
- {
- public:
- void SetInt(int i) { m_i = i; }
- int GetInt() { return m_i;}
- private:
- int m_i;
- };
- class CQueue
- {
- public:
- void AddMember(CQueueMember *Member) { m_Vars.push(Member); }
- void OnTick()
- {
- if(!m_Vars.size()) return;
- CQueueMember::eMembers type= m_Vars.front()->GetType() ;
- switch(type)
- {
- case CQueueMember::Member_1:
- {
- CMember_1 *obj = (CMember_1 *)m_Vars.front();
- printf("%s\n",obj->GetString().c_str());
- break;
- }
- case CQueueMember::Member_2:
- {
- CMember_2 *obj = (CMember_2 *)m_Vars.front();
- printf("%d\n",obj->GetInt());
- break;
- }
- }
- m_Vars.pop();
- }
- private:
- queue<CQueueMember*> m_Vars;
- };
- void Thread(void *addr)
- {
- struct stThread
- {
- int *br,*broken;
- CQueue *Queue;
- } *thr = (stThread *)addr;
- while(! *(thr->br))
- {
- thr->Queue->OnTick();
- Sleep(500);
- }
- *(thr->broken) = 1;
- }
- int main()
- {
- struct stThread
- {
- int *br,*broken;
- CQueue *Q;
- } Thr ;
- CQueue Queue;
- CMember_1 Member1;
- CMember_2 Member2;
- int iBreak=0;
- int iBroken=0;
- Member1.SetType(CQueueMember::Member_1);
- Member1.SetString("asdf");
- Member2.SetType(CQueueMember::Member_2);
- Member2.SetInt(5);
- Thr.Q = &Queue;
- Thr.br = &iBreak;
- Thr.broken = &iBroken;
- CreateThread(0,0,(LPTHREAD_START_ROUTINE)Thread,&Thr,0,0);
- while(1)
- {
- if(GetAsyncKeyState('1'))
- Queue.AddMember(&Member1);
- if(GetAsyncKeyState('2'))
- Queue.AddMember(&Member2);
- if(GetAsyncKeyState('3'))
- {
- iBreak = 1;
- while(!iBroken);
- return 1;
- }
- Sleep(30);
- }
- return 1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement