Boost logo

Boost Users :

Subject: [Boost-users] [Thread] finding a good expression to wait...
From: Julien Claassen (julien_at_[hidden])
Date: 2009-09-07 19:59:59


Hello everyone!
   I'm trying to build a simple user-interface. It reads events from the
keyboard using cin in one thread and then yields to a controller, which does
some work.
   I'm doing the waiting part in the threads using condition_variables. The
input-threads "main-function" looks something like this:

*** CODE SNIPPET ***
condition input_cond, output_cond;
// some other code
void main_loop(condition& in, condition& out)
{
   char input_key;
   boost::mutex::scoped_lock lk(my_global_mutex);
   while (input_key != 'q')
   {
     while (in.timed_wait(lk,system_time(second_clock::local() + seconds(1)) \
         == false) // DEFINITELY NOT! good
     { }
     cin >> input_key;
     out.notify_one();
   }
}
*** END OF CODE ***
   The controller/output main_loop looks similar only it uses
out.timed_wait(...) and in.notify_one(), when the crucial task is done. Result
is, both main_loops, when passed to a thread start and then it's deadlocked.
   I have seen examples of the producer/consumer pattern, which worked with
buffers and they used conditions like:
   while (buffer_full == 0)
   or similar. I only have one key, no queueing, so what to do here?
   Please any good pointer/help/example is appreciated.
   Gratefully yours
          Julien

--------
Music was my first love and it will be my last (John Miles)

======== FIND MY WEB-PROJECT AT: ========
http://ltsb.sourceforge.net
the Linux TextBased Studio guide
======= AND MY PERSONAL PAGES AT: =======
http://www.juliencoder.de


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