Re: [boost] Threads and mutexes : assign_to error
by Jacques Kerner other posts by this author
Apr 30 2003 2:54PM messages near this date
Re: [boost] Threads and mutexes : assign_to error
|
Re: [boost] Threads and mutexes : assign_to error
Douglas Gregor wrote:
> On Wednesday 30 April 2003 08:44 am, Jacques Kerner wrote:
>
>
> >Hi,
> >
> >I get the following error :
> >
> >error C2664: 'void boost::function0<R,Allocator>::assign_to(Functor)' :
> >unable to convert parameter 1 from 'const CTaskManager' to 'CTaskManager'
> >
> >when doing this :
> >
> >class CTaskManager
> >{
> > public:
> > CTaskManager();
> > ~CTaskManager();
> > void operator()() {}
> >
> > private:
> > boost::mutex m_mutex;
> >}
> >
> >and
> >
> >CTaskManager taskManager;
> >boost::thread_group mainThreadGroup;
> >mainThreadGroup.create_thread(taskManager);
> >mainThreadGroup.join_all();
> >
> >The error dissapears when I remove the mutex from the definition of
> >CTaskManager ... (?!!)
> >
> >So what is the right way to use mutex and threads together? Do I have to
> >declare the mutex outside of the
> >functor? Why?
> >
> >
>
> Mutexes are not copyable, and when you pass taskManager to create_thread it
> tries to make a local copy of the function object . If you would prefer to
> pass a reference to taskManager to create_thread, do this:
>
> mainThreadGroup.create_thread(boost::ref(taskManager));
>
> Doug
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>
>
>
Thank you very much, it works great. I had missed the fact that
create_thread makes a copy
of the functor. Thanks again!
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Thread:
Jacques Kerner
Douglas Gregor
Jacques Kerner
William E. Kempf
|