1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-12-15 12:40:35 +00:00

Merge branch 'next' of https://github.com/gnss-sdr/gnss-sdr into next

This commit is contained in:
Carles Fernandez 2019-07-16 12:02:41 +02:00
commit 57cc2a4229
4 changed files with 35 additions and 13 deletions

View File

@ -38,6 +38,7 @@
#include <boost/crc.hpp> #include <boost/crc.hpp>
#include <boost/date_time/gregorian/gregorian.hpp> #include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/dynamic_bitset.hpp> #include <boost/dynamic_bitset.hpp>
#include <boost/exception/diagnostic_information.hpp>
#include <algorithm> // for std::reverse #include <algorithm> // for std::reverse
#include <chrono> // std::chrono::seconds #include <chrono> // std::chrono::seconds
#include <cmath> // for std::fmod #include <cmath> // for std::fmod

View File

@ -34,12 +34,12 @@
#include "concurrent_queue.h" #include "concurrent_queue.h"
#include "galileo_ephemeris.h"
#include "glonass_gnav_ephemeris.h"
#include "glonass_gnav_utc_model.h"
#include "gnss_synchro.h" #include "gnss_synchro.h"
#include <galileo_ephemeris.h> #include "gps_cnav_ephemeris.h"
#include <gps_ephemeris.h> #include "gps_ephemeris.h"
#include <gps_cnav_ephemeris.h>
#include <glonass_gnav_ephemeris.h>
#include <glonass_gnav_utc_model.h>
#include <boost/asio.hpp> #include <boost/asio.hpp>
#include <boost/date_time/posix_time/posix_time.hpp> #include <boost/date_time/posix_time/posix_time.hpp>
#include <glog/logging.h> #include <glog/logging.h>
@ -48,6 +48,7 @@
#include <cstdint> #include <cstdint>
#include <cstring> // for memcpy #include <cstring> // for memcpy
#include <deque> #include <deque>
#include <list>
#include <map> #include <map>
#include <memory> #include <memory>
#include <set> #include <set>

View File

@ -39,6 +39,7 @@
#include "gps_cnav_ephemeris.h" #include "gps_cnav_ephemeris.h"
#include "gps_ephemeris.h" #include "gps_ephemeris.h"
#include "rtcm.h" #include "rtcm.h"
#include <boost/exception/diagnostic_information.hpp>
#include <glog/logging.h> #include <glog/logging.h>
#include <ctime> // for tm #include <ctime> // for tm
#include <exception> // for exception #include <exception> // for exception

View File

@ -31,8 +31,11 @@
#ifndef GNSS_SDR_CONCURRENT_QUEUE_H #ifndef GNSS_SDR_CONCURRENT_QUEUE_H
#define GNSS_SDR_CONCURRENT_QUEUE_H #define GNSS_SDR_CONCURRENT_QUEUE_H
#include <boost/thread.hpp> #include <chrono>
#include <condition_variable>
#include <mutex>
#include <queue> #include <queue>
#include <thread>
template <typename Data> template <typename Data>
@ -48,7 +51,7 @@ class Concurrent_Queue
public: public:
void push(Data const& data) void push(Data const& data)
{ {
boost::mutex::scoped_lock lock(the_mutex); std::unique_lock<std::mutex> lock(the_mutex);
the_queue.push(data); the_queue.push(data);
lock.unlock(); lock.unlock();
the_condition_variable.notify_one(); the_condition_variable.notify_one();
@ -56,13 +59,13 @@ public:
bool empty() const bool empty() const
{ {
boost::mutex::scoped_lock lock(the_mutex); std::unique_lock<std::mutex> lock(the_mutex);
return the_queue.empty(); return the_queue.empty();
} }
bool try_pop(Data& popped_value) bool try_pop(Data& popped_value)
{ {
boost::mutex::scoped_lock lock(the_mutex); std::unique_lock<std::mutex> lock(the_mutex);
if (the_queue.empty()) if (the_queue.empty())
{ {
return false; return false;
@ -74,7 +77,7 @@ public:
void wait_and_pop(Data& popped_value) void wait_and_pop(Data& popped_value)
{ {
boost::mutex::scoped_lock lock(the_mutex); std::unique_lock<std::mutex> lock(the_mutex);
while (the_queue.empty()) while (the_queue.empty())
{ {
the_condition_variable.wait(lock); the_condition_variable.wait(lock);
@ -82,10 +85,26 @@ public:
popped_value = the_queue.front(); popped_value = the_queue.front();
the_queue.pop(); the_queue.pop();
} }
bool timed_wait_and_pop(Data& popped_value, int wait_ms)
{
std::unique_lock<std::mutex> lock(the_mutex);
if (the_queue.empty())
{
the_condition_variable.wait_for(lock, std::chrono::milliseconds(wait_ms));
if (the_queue.empty())
{
return false;
}
}
popped_value = the_queue.front();
the_queue.pop();
return true;
}
private: private:
std::queue<Data> the_queue; std::queue<Data> the_queue;
mutable boost::mutex the_mutex; mutable std::mutex the_mutex;
boost::condition_variable the_condition_variable; std::condition_variable the_condition_variable;
}; };
#endif #endif