MessageThread.h 963 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. //
  2. // Created by Grishka on 17.06.2018.
  3. //
  4. #ifndef LIBTGVOIP_MESSAGETHREAD_H
  5. #define LIBTGVOIP_MESSAGETHREAD_H
  6. #include "threading.h"
  7. #include "utils.h"
  8. #include <vector>
  9. #include <functional>
  10. namespace tgvoip{
  11. class MessageThread : public Thread{
  12. public:
  13. TGVOIP_DISALLOW_COPY_AND_ASSIGN(MessageThread);
  14. MessageThread();
  15. virtual ~MessageThread();
  16. uint32_t Post(std::function<void()> func, double delay=0, double interval=0);
  17. void Cancel(uint32_t id);
  18. void CancelSelf();
  19. void Stop();
  20. enum{
  21. INVALID_ID=0
  22. };
  23. private:
  24. struct Message{
  25. uint32_t id;
  26. double deliverAt;
  27. double interval;
  28. std::function<void()> func;
  29. };
  30. void Run();
  31. void InsertMessageInternal(Message& m);
  32. bool running=true;
  33. std::vector<Message> queue;
  34. Mutex queueMutex;
  35. uint32_t lastMessageID=1;
  36. bool cancelCurrent=false;
  37. #ifdef TGVOIP_WIN32_THREADING
  38. HANDLE event;
  39. #else
  40. pthread_cond_t cond;
  41. #endif
  42. };
  43. }
  44. #endif //LIBTGVOIP_MESSAGETHREAD_H