timedlockdata.hpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. //
  2. // Created by zx on 22-12-1.
  3. //
  4. #ifndef LIO_LIVOX_CPP_DEFINE_TIME_DATA_H_
  5. #define LIO_LIVOX_CPP_DEFINE_TIME_DATA_H_
  6. #include <chrono>
  7. #include <mutex>
  8. template <typename T>
  9. class TimedLockData
  10. {
  11. public:
  12. TimedLockData();
  13. void reset(const T& tdata,double timeout=0.1);
  14. bool timeout();
  15. T Get();
  16. // T& operator()();
  17. protected:
  18. T data_;
  19. std::chrono::steady_clock::time_point tp_;
  20. std::mutex mutex_;
  21. double timeout_;
  22. };
  23. template <typename T>
  24. TimedLockData<T>::TimedLockData()
  25. {
  26. timeout_=0.1;
  27. }
  28. template <typename T>
  29. void TimedLockData<T>::reset(const T& tdata,double timeout)
  30. {
  31. std::lock_guard<std::mutex> lck (mutex_);
  32. data_=tdata;
  33. timeout_=timeout;
  34. tp_=std::chrono::steady_clock::now();
  35. }
  36. template <typename T>
  37. bool TimedLockData<T>::timeout()
  38. {
  39. auto now=std::chrono::steady_clock::now();
  40. auto duration = std::chrono::duration_cast<std::chrono::microseconds>(now - tp_);
  41. double time = double(duration.count()) * std::chrono::microseconds::period::num / std::chrono::microseconds::period::den;
  42. return time>timeout_;
  43. }
  44. template <typename T>
  45. T TimedLockData<T>::Get()
  46. {
  47. std::lock_guard<std::mutex> lck (mutex_);
  48. return data_;
  49. }
  50. //template <typename T>
  51. //T& TimedLockData<T>::operator()(void ){
  52. // std::lock_guard<std::mutex> lck (mutex_);
  53. // return data_;
  54. //}
  55. #endif //LIO_LIVOX_CPP_DEFINE_TIME_DATA_H_