Я собираюсь использовать timed_wait () из boost для ожидания условной переменной. Я не смог найти хороший код мира из документации Boost и нашел несколько ссылок на переполнение стека. в этих примерах я обнаружил следующие 2 варианта использования.
bool bDoneInTime = g_Condition.timed_wait(lockedCondLock, boost::system_time() + boost::posix_time::seconds(1));
, передавая задержку с добавлением ее в системное время. bool bDoneInTime = g_Condition.timed_wait(lockedCondLock, boost::posix_time::seconds(1));
просто передавайте задержку
Я попробовал оба в следующем примере кода только для тестирования
#include <string>
#include <vector>
#include <iostream>
#include <thread>
#include <time.h>
#include <sys/time.h>
#include <pthread.h>
#include <boost/thread/mutex.hpp>
#include <boost/thread/condition_variable.hpp>
static boost::mutex g_ConditionMutex;
typedef boost::unique_lock<boost::mutex> lock_t;
static boost::condition_variable g_Condition;
using namespace std;
void* fun(void* arg)
{
printf("\nIn thread\n");
lock_t lock(g_ConditionMutex);
printf("Sleep second\n");
g_Condition.timed_wait(lock, boost::posix_time::seconds(1));
printf("Sleep second as zebra driver\n");
g_Condition.timed_wait(lock, boost::system_time() + boost::posix_time::seconds(1));
printf("\nDone\n");
}
int main(int argc, char *argv[])
{
pthread_t thread;
void *ret;
pthread_create(&thread, NULL, fun, NULL);
printf("Sleep 10 sec main\n");
sleep(10);
printf("Notify\n");
g_Condition.notify_one();
pthread_join(thread,&ret);
return 0;
}
, оба метода работают, но я не совсем понимаю, как использовать этот template<typename lock_type> bool timed_wait(lock_type& lock,boost::system_time const& abs_time)
от boost.
Пожалуйста, кто-нибудь, помогите мне разобраться в правильном пути.