MessageQueue.h 951 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #ifndef _UTILS_MESSAGEQUEUE_H_
  2. #define _UTILS_MESSAGEQUEUE_H_
  3. #include <vector>
  4. #include "system/Mutex.h"
  5. #include "system/Condition.h"
  6. class Message {
  7. public:
  8. int mWhoseMsg; // enum WhoseMessage
  9. int mMsgType;
  10. int mPara0;
  11. int mPara1;
  12. public:
  13. Message();
  14. ~Message();
  15. void setData(const char *pData, int nDataSize);
  16. void* getData(int *pDataSize = NULL);
  17. void reset();
  18. Message& operator=(const Message &rhs);
  19. private:
  20. void *mDataPtr;
  21. int mDataSize;
  22. };
  23. class MessageQueue {
  24. public:
  25. MessageQueue();
  26. ~MessageQueue();
  27. void queueMessage(Message *pMsgIn);
  28. bool dequeueMessage(Message *pMsgOut);
  29. void flushMessage();
  30. int waitMessage(unsigned int timeout = 0); // return value is the message number.
  31. int getMessageCount();
  32. private:
  33. Mutex mLock;
  34. Condition mCondMessageQueueChanged;
  35. bool mWaitMessageFlag;
  36. std::vector<Message *> mValidMessageList;
  37. std::vector<Message *> mIdleMessageList;
  38. };
  39. #endif /* _UTILS_MESSAGEQUEUE_H_ */