update_thread.cpp 1.0 KB

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