Boost logo

Boost :

Subject: Re: [boost] [gsoc] Boost.Process done
From: Mathias Gaunard (mathias.gaunard_at_[hidden])
Date: 2011-02-02 05:48:41


On 01/02/2011 22:37, Claude Quézel wrote:
> I noticed that the boost::process::child does not have a default
> constructor. If I have a coding requirements like the following
> example, I would be stuck:
>
>
>
> // Note the required default constructor
> boost::process::child child;
>
> // Create a scope for the mutex guard
> {
> boost::lock_guard<boost::mutex> guard(process_launch);
>
> // Here I must do something within guard scope
> // that must be done with the boost::process::launch
> do_something();
>
> child = boost::process::launch(exec, args, ctx);
> }
>
> // ...
>
> boost::process::status s = child.wait();

How about

template<typename Lockable>
struct lock_maybe_guard
{
     explicit lock_maybe_guard(Lockable& m_) : m(m_), locked(false)
     {
         lock();
     }

     void lock()
     {
         if(!locked)
         {
             m.lock();
             locked = true;
         }
     }

     unlock()
     {
         if(locked)
         {
             m.unlock();
             locked = false;
         }
     }

     ~lock_guard()
     {
         unlock();
     }

private:
     Lockable& m;
     bool locked;
};

boost::process::child child;

lock_maybe_guard<boost::mutex> guard(process_launch);

// Here I must do something within guard scope
// that must be done with the boost::process::launch
do_something();

guard.unlock();

child = boost::process::launch(exec, args, ctx);


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk