Add a thread wrapper class that joins on destruction
    
    
    
      
      
      
        
Based on the scoped_thread class defined in C++ Concurrency in Action define a thread wrapper class that instead of calling terminate if the thread is joinable on destruction, join it if joinable.
While the scoped_thread class defined in C++ Concurrency in Action is a strict scoped class that doesn't allows any change in the wrapped thread, I think that making the interface thread compatible is also a good option. This doesn't means that a strict scoped thread has no use.
namespace boost
{
  class scoped_thread : public thread
  {
    typedef thread base_type;
  public:
    BOOST_THREAD_MOVABLE_ONLY( scoped_thread )
    explicit scoped_thread(BOOST_THREAD_RV_REF(thread) t_) :
      base_type(boost::forward<base_type>(t_)),
      m_(*static_cast<base_type*>(this))
    {
    }
    scoped_thread(BOOST_RV_REF(scoped_thread) x) :
      base_type(boost::move(static_cast<base_type&>(x)))
    { }
    scoped_thread& operator=(BOOST_RV_REF(scoped_thread) x)
    {
      base_type::operator=(boost::move(static_cast<base_type&>(x)));
      return *this;
    }
    ~scoped_thread()
    {
      if (joinable())
      {
        join();
      }
    }
  };
  inline void swap(scoped_thread& lhs,scoped_thread& rhs) BOOST_NOEXCEPT
  {
      return lhs.swap(rhs);
  }
}
       
     
   
 
      
        
        
          Change History
          (8)
        
          
          
  
  
  
    
      | Description: | modified (diff) | 
  
 
           
          
  
  
  
    
      | Description: | modified (diff) | 
  
 
           
          
  
  
  
    
      | Milestone: | To Be Determined | 
    
      | Summary: | Add a thread wrapper class that interrupts and join on destruction → Add a thread wrapper class that joins on destruction | 
  
 
           
          
          
          
  
  
  
    
      | Milestone: | → Boost 1.53.0 | 
  
 
           
          
  
  
  
    
      | Resolution: | → fixed | 
    
      | Status: | assigned → closed | 
  
 
           
          
         
       
     
        
    
Committed revision [81073][81079][81080][81086].