3 Stimmen

Bei Verwendung des Konstruktors boost::scoped_lock(Mutex &mx, bool initially_locked) erhalte ich Fehler

Gibt es nicht einen boost::scoped_lock-Konstruktor, der einen boolschen Wert als zweiten Parameter annimmt? Ich dachte, ich hätte ihn schon einmal benutzt. boost::scoped_lock(Mutex &mx, bool initially_locked)

El Dokumentation für scoped_lock zeigt den zweiten Parameter als " nicht spezifiziert ". Weiß jemand, was das zu bedeuten hat?!?

Die Fehler, die ich erhalte, sind:

c:\program files\boost\boost_1_39\boost\thread\win32\basic_timed_mutex.hpp(118) : error C2679: binary '+' : no operator found which takes a right-hand operand of type 'const bool' (or there is no acceptable conversion)
        c:\program files\boost\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:\program files\boost\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:\program files\boost\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:\program files\boost\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:\program files\boost\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:\program files\boost\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 bool)'
        c:\program files\boost\boost_1_39\boost\thread\locks.hpp(353) : see reference to function template instantiation 'bool boost::detail::basic_timed_mutex::timed_lock<TimeDuration>(const Duration &)' being compiled
        with
        [
            TimeDuration=bool,
            Duration=bool
        ]
        c:\program files\boost\boost_1_39\boost\thread\locks.hpp(241) : see reference to function template instantiation 'bool boost::unique_lock<Mutex>::timed_lock<TimeDuration>(const TimeDuration &)' being compiled
        with
        [
            Mutex=boost::mutex,
            TimeDuration=bool
        ]
        d:\imagehawk\projects\virtualpc_archiveservice\ifl\src\archiveservice\archive.cpp(599) : see reference to function template instantiation 'boost::unique_lock<Mutex>::unique_lock<bool>(Mutex &,const TimeDuration &)' being compiled
        with
        [
            Mutex=boost::mutex,
            TimeDuration=bool
        ]

Hier ist ein Teil meines Quellcodes, wenn es hilft:

void SpawnXMessageThread(bool bTakeLock=true) {
    boost::mutex::scoped_lock lock(m_mtx,bTakeLock);
    m_pxmessage= new XMessage();
    m_pThread = new boost::thread(boost::ref(*m_pxmessage));
}

Die Idee ist, dass ich die m_mtx auf der Grundlage der booleschen sperren wird. Auf diese Weise, wenn ich m_mtx vor dem Aufruf SpawnXMessageThread sperren kann ich SpawnXMessageThread sagen, die Mutex nicht zu sperren (weil ich es aready gesperrt).

btw, ich bin ziemlich neu bei Boost und Threads.

3voto

jpalecek Punkte 45829

Den Unterlagen zufolge können Sie das nicht direkt tun. Aber Sie können etwas wie dieses tun:

boost::unique_lock lck(m_mtx, boost::defer_lock);
if(bTakeLock) lck.lock();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X