Boost logo

Boost :

Subject: Re: [boost] problems with recursive_timed_mutex and scoped lock wont compile in version 1.39
From: amillet (aymeric.millet_at_[hidden])
Date: 2010-02-05 02:37:05


did you find a solution for this compilation errror ?

regards

Clark Sims-2 wrote:
>
> I can compile the following code fine in boost 1.33.1 but it generates
> compiler errors
> in version 1.39. I am using visual studio 2005.
>
> I will post the code, and then post the compiler errors:
>
> #include <iostream>
> #include <boost/thread/thread.hpp>
> #include <boost/thread/xtime.hpp>
> #include <boost/thread/recursive_mutex.hpp>
>
> using namespace std;
> //using namespace boost;
> using boost::mutex;
> using boost::thread;
> using boost::recursive_timed_mutex;
> using boost::xtime;
>
> boost::recursive_timed_mutex hello_mutex;
>
> void hello( int thread_id, int iter) {
> cerr << thread_id << " : " << iter << endl;
> }
>
>
> void rand_xtime( xtime* xt) {
> xtime_get( xt, boost::TIME_UTC);
> //xt.nsec += (rand() % 1000000000);
> xt->sec += 1 + rand()%5;
> }
>
> void say_hello( int thread_id) {
> for (int iter=0; iter<5; iter++) {
> xtime xt;
> rand_xtime( &xt);
> thread::sleep(xt);
> rand_xtime( &xt);
> {
> recursive_timed_mutex &refer_hello = hello_mutex;
> const xtime& refer_xt = xt;
> recursive_timed_mutex::scoped_timed_lock
> lock1( refer_hello, refer_xt);
> if (lock1) {
> hello( thread_id, iter);
> }
> }
> }
> }
>
> void hello1() {
> say_hello( 1);
> }
>
> void hello2() {
> say_hello( 2);
> }
>
> int main() {
> boost::thread thrd1(hello1);
> boost::thread thrd2(hello2);
>
> thrd1.join();
> thrd2.join();
>
> return 0;
> }
>
> Microsoft (R) Program Maintenance Utility Version 8.00.50727.42
> Copyright (C) Microsoft Corporation. All rights reserved.
>
> Warning: cannot find Makefile.TimedMutex.dep
> cl.exe /nologo /Ob0 /W3 /EHs /MD /GR /I ".." /D NDEBUG /D WIN32 /D
> _CONSOLE /FD /c /Fo"Release\TimedMutex\I386\TimedMutex.obj"
> "TimedMutex.cpp"
> TimedMutex.cpp
> c:\boost_1_39\boost\thread\win32\basic_recursive_mutex.hpp(64) : error
> C2679: binary '+' : no operator found which takes a right-hand operand of
> type 'const boost::xtime' (or there is no acceptable conversion)
>
> c:\boost_1_39\boost/date_time/posix_time/date_duration_operators.hpp(31):
> could be 'boost::posix_time::ptime boost::posix_time::operator +(const
> boost::posix_time::ptime &,const boost::gregorian::months &)' [found using
> argument-dependent lookup]
> c:\boost_1_39\boost/date_time/date_duration_types.hpp(132): or
> 'boost::gregorian::date
> boost::date_time::months_duration<base_config>::operator +(const
> boost::gregorian::date &,const
> boost::date_time::months_duration<base_config> &)' [found using
> argument-dependent lookup]
> with
> [
> base_config=boost::gregorian::greg_durations_config
> ]
>
> c:\boost_1_39\boost/date_time/posix_time/date_duration_operators.hpp(75):
> or 'boost::posix_time::ptime boost::posix_time::operator +(const
> boost::posix_time::ptime &,const boost::gregorian::years &)' [found using
> argument-dependent lookup]
> c:\boost_1_39\boost/date_time/date_duration_types.hpp(244): or
> 'boost::gregorian::date
> boost::date_time::years_duration<base_config>::operator +(const
> boost::gregorian::date &,const
> boost::date_time::years_duration<base_config> &)' [found using
> argument-dependent lookup]
> with
> [
> base_config=boost::gregorian::greg_durations_config
> ]
> c:\boost_1_39\boost/date_time/time.hpp(139): or
> 'boost::posix_time::ptime
> boost::date_time::base_time<T,time_system>::operator +(const
> boost::gregorian::date_duration &) const'
> with
> [
> T=boost::posix_time::ptime,
> time_system=boost::posix_time::posix_time_system
> ]
> c:\boost_1_39\boost/date_time/time.hpp(159): or
> 'boost::posix_time::ptime
> boost::date_time::base_time<T,time_system>::operator +(const
> boost::posix_time::time_duration &) const'
> with
> [
> T=boost::posix_time::ptime,
> time_system=boost::posix_time::posix_time_system
> ]
> while trying to match the argument list '(boost::system_time,
> const boost::xtime)'
> c:\boost_1_39\boost/thread/locks.hpp(364) : see reference to
> function template instantiation 'bool
> boost::detail::basic_recursive_mutex_impl<underlying_mutex_type>::timed_lock<boost::xtime>(const
> Duration &)' being compiled
> with
> [
> underlying_mutex_type=boost::detail::basic_timed_mutex,
> Duration=boost::xtime
> ]
> c:\boost_1_39\boost/thread/locks.hpp(363) : while compiling class
> template member function 'bool boost::unique_lock<Mutex>::timed_lock(const
> boost::xtime &)'
> with
> [
> Mutex=boost::recursive_timed_mutex
> ]
> TimedMutex.cpp(36) : see reference to class template instantiation
> 'boost::unique_lock<Mutex>' being compiled
> with
> [
> Mutex=boost::recursive_timed_mutex
> ]
> NMAKE : fatal error U1077: '"c:\Program Files\Microsoft Visual Studio
> 8\VC\BIN\cl.exe"' : return code '0x2'
> Stop.
>
>
>
>
>
>
>
> _______________________________________________
> Unsubscribe & other changes:
> http://lists.boost.org/mailman/listinfo.cgi/boost
>
>

-- 
View this message in context: http://old.nabble.com/problems-with-recursive_timed_mutex-and-scoped-lock-wont-compile-in-version-1.39-tp25333772p27422298.html
Sent from the Boost - Dev mailing list archive at Nabble.com.

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