Seite 1 von 1

Signal Condition mit QMutex/QWaitCondition

Verfasst: 26. Oktober 2011 16:10
von lespaul
Hallo,
hier verwende ich ein eingekapseltes

Code: Alles auswählen

#ifndef MY_SIGNAL_H
#define MY_SIGNAL_H
#include <QtCore/QMutex>
#include <QtCore/QWaitCondition>

class MySignalCondition
{
    public:
        MySignalCondition( void ){}
        void prepare( void ) { m_mutex.lock(); }
        void trigger( void ) {
            m_mutex.lock();
            m_wait_condition.wakeOne();
            m_mutex.unlock();
        }

        void wait( void ){
            m_wait_condition.wait( &m_mutex);
            m_mutex.unlock();
        }

    private:
	MySignalCondition( const MySignalCondition & );
        QMutex m_mutex; ///< Mutex for function call synchronisation.
        QWaitCondition m_wait_condition; ///< Wait contition for function call synchronisation.
}; #endif //EOF
Weiterhin habe ich noch 2 voneinander unabhängige Klassen (Klasse1 und Klasse2). Allerdings übergebe ich Klasse2 eine Referenz von Klasse1 im Konstruktor.

Klasse2(Klasse1 &my_K1)
: ref_K1(my_K1) {}

Weiterhin habe ich in Klasse1 eine Methode, welche eine MYSignalCondition benutzt:

Code: Alles auswählen

int Klasse1::get_Traffic_Light_Edge()
{
	int t_edgeID = -1;
	
	// Im Header steht ... MySignalCondition mySignalCondition;
	this->mySignalCondition.prepare();
	DispatchEvent( "TriggerTrafficLight" , t_edgeID);
	this->mySignalCondition.wait();
	
	return t_edgeID;
}
und dann im EventHandler um das Event abzufangen und die Condition zu triggern..:

Code: Alles auswählen

../
case TRAFFIC_LIGHTS_LOCATED: 
	mySignalCondition.trigger();
	break;
../
Wenn ich diese Methode von Klasse2 aus Aufrufe, klappt alles. Wenn ich diese Methode in der eigenen Klasse1 aufrufe bleibt es am .wait() hängen und niochts geht mehr.

Hat jemand eine Vermutung? Ich danke!

Gruß Lespaul

Re: Signal Condition mit QMutex/QWaitCondition

Verfasst: 28. Oktober 2011 19:27
von Christian81
Da dies so nicht wirklich sichtbar was in welchem Thread etc läuft hilft nur ein minmales kompilierbares Testprogramm zum nachvollziehen.