Signal Condition mit QMutex/QWaitCondition
Verfasst: 26. Oktober 2011 16:10
Hallo,
hier verwende ich ein eingekapseltes
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:
und dann im EventHandler um das Event abzufangen und die Condition zu triggern..:
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
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
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;
}
Code: Alles auswählen
../
case TRAFFIC_LIGHTS_LOCATED:
mySignalCondition.trigger();
break;
../
Hat jemand eine Vermutung? Ich danke!
Gruß Lespaul