Signal Condition mit QMutex/QWaitCondition

Alles rund um die Programmierung mit Qt
Antworten
lespaul
Beiträge: 87
Registriert: 11. August 2011 10:07

Signal Condition mit QMutex/QWaitCondition

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Signal Condition mit QMutex/QWaitCondition

Beitrag von Christian81 »

Da dies so nicht wirklich sichtbar was in welchem Thread etc läuft hilft nur ein minmales kompilierbares Testprogramm zum nachvollziehen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten