update_thread.cpp 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #include "protocol.pb.h"
  2. #include "update_thread.h"
  3. #include "socket_client.h"
  4. CUpdateThread::CUpdateThread()
  5. {
  6. _run=false;
  7. }
  8. void CUpdateThread::start(SocketClient* c)
  9. {
  10. _run=false;
  11. _client=c;
  12. _thread=std::thread(&CUpdateThread::run,this);
  13. }
  14. void CUpdateThread::run()
  15. {
  16. _run=true;
  17. long long tick = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count();
  18. while(_run)
  19. {
  20. std::this_thread::sleep_for(std::chrono::microseconds(500));
  21. if(!_run) break;
  22. long long diff=std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count();
  23. if(diff-tick>3)
  24. {
  25. _client->WriteKeepAlive();
  26. tick=std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now().time_since_epoch()).count();
  27. }
  28. }
  29. }
  30. void CUpdateThread::stop()
  31. {
  32. if(_run)
  33. {
  34. _run=false;
  35. _thread.join();
  36. }
  37. }
  38. CUpdateThread::~CUpdateThread()
  39. {
  40. _run = false;
  41. _thread.join();
  42. }