Boost logo

Boost Users :

Subject: [Boost-users] condition_variable::timed_wait doesn't wait
From: Daniele Barzotti (daniele.barzotti_at_[hidden])
Date: 2009-03-09 04:49:19


Hi!
I'm trying to use condition_variable::timed_wait without success.
Using the following code, the timed_wait returns immediatly also if
Receive() is never called.
Where I wrong?

void Receive()
{
  boost::lock_guard<boost::mutex> lock(_mut);

  //... code ...//

  _data_ready = true;

  // Notify and unlock the mutex
  _cond.notify_one();
}

bool Send()
{
  boost::unique_lock<boost::mutex> lock(_mut);

  boost::xtime xt;
  xtime_get(&xt, boost::TIME_UTC);
  xt.sec += 5;

  _data_ready = false;

  //... send data ...//

  //wait for an answer..
  bool ready = _cond.timed_wait(lock, xt, boost::lambda::var(_data_ready));

  return ready;
}

I've also tried to use:

ptime t = second_clock::universal_time();
ptime timeout = t + milliseconds(cmd_timeout);

bool ready = _cond.timed_wait(lock, timeout,
boost::lambda::var(_data_ready));

but with the same effect.

Thanks,
Daniele.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net