diff options
Diffstat (limited to 'src/output')
-rw-r--r-- | src/output/USRPTime.cpp | 41 | ||||
-rw-r--r-- | src/output/USRPTime.h | 5 |
2 files changed, 17 insertions, 29 deletions
diff --git a/src/output/USRPTime.cpp b/src/output/USRPTime.cpp index 56bdf50..39b0e5a 100644 --- a/src/output/USRPTime.cpp +++ b/src/output/USRPTime.cpp @@ -204,43 +204,32 @@ void USRPTime::check_gps() if (gpsfix_needs_check() and time_last_check + checkinterval < time_now) { time_last_check = time_now; - // Alternate between launching thread and checking the - // result. - if (gps_fix_task.joinable()) { - if (gps_fix_future.has_value()) { - - gps_fix_future.wait(); - - gps_fix_task.join(); - - if (not gps_fix_future.get()) { - if (num_checks_without_gps_fix == 0) { - etiLog.level(alert) << "OutputUHD: GPS Time Lock lost"; - } - num_checks_without_gps_fix++; + // Alternate between launching task and checking the result. + if (gps_fix_future.valid()) { + if (not gps_fix_future.get()) { + if (num_checks_without_gps_fix == 0) { + etiLog.level(alert) << "OutputUHD: GPS Time Lock lost"; } - else { - if (num_checks_without_gps_fix) { - etiLog.level(info) << "OutputUHD: GPS Time Lock recovered"; - } - num_checks_without_gps_fix = 0; + num_checks_without_gps_fix++; + } + else { + if (num_checks_without_gps_fix) { + etiLog.level(info) << "OutputUHD: GPS Time Lock recovered"; } + num_checks_without_gps_fix = 0; } } else { // Checking the sensor here takes too much // time, it has to be done in a separate thread. if (gpsdo_is_ettus()) { - gps_fix_pt = boost::packaged_task<bool>( - boost::bind(check_gps_locked, m_usrp) ); + gps_fix_future = std::async(std::launch::async, + std::bind(check_gps_locked, m_usrp) ); } else { - gps_fix_pt = boost::packaged_task<bool>( - boost::bind(check_gps_timelock, m_usrp) ); + gps_fix_future = std::async(std::launch::async, + std::bind(check_gps_timelock, m_usrp) ); } - gps_fix_future = gps_fix_pt.get_future(); - - gps_fix_task = boost::thread(boost::move(gps_fix_pt)); } } } diff --git a/src/output/USRPTime.h b/src/output/USRPTime.h index 7527f21..70e55ae 100644 --- a/src/output/USRPTime.h +++ b/src/output/USRPTime.h @@ -42,6 +42,7 @@ DESCRIPTION: #include <memory> #include <string> #include <atomic> +#include <future> #include "Log.h" #include "output/SDR.h" @@ -96,9 +97,7 @@ class USRPTime { using timepoint_t = std::chrono::time_point<std::chrono::steady_clock>; timepoint_t time_last_check; - boost::packaged_task<bool> gps_fix_pt; - boost::unique_future<bool> gps_fix_future; - boost::thread gps_fix_task; + std::future<bool> gps_fix_future; // Returns true if we want to check for the gps_timelock sensor bool gpsfix_needs_check(void) const; |