Emittiertes Signal kommt nicht an
Verfasst: 7. Februar 2012 10:06
Hej,
ich habe gerade folgendes Problem:
Eine Kamera ruft eine Callback-Funktion auf, wenn sie ein neues Bild zur Verfügung stellen kann. Die Callback-Funktion weiß, zu welchem Objekt sie gehört. Jetzt will ich in der Callback-Funktion ein Signal aussenden, dass ein neues Bild zur Verfügung steht.
Mit diesem Signal habe ich einen Slot verknüpft, der dann das geholte Bild verarbeiten soll.
Das will ich machen, damit die Callback-Funktion nicht zu lange beschäftigt ist, da ich sonst eine hässliche Zeitverzögerung in meine Ausgabe bekomme.
Problem dabei: Der Slot wird leider nie aufgerufen. Wenn ich eine Ausgabe direkt vor die emit-Zeile packe, wird diese ausgegeben, die Callback-Funktion läuft also auf jeden Fall durch.
Ich verstehe leider nicht, warum das so ist. Kann mir jemand helfen?
Gruß
Karocke
Hier mal ein paar Codeschnipsel:
im Konstruktor:
In der Callback-Funktion (statische Funktion):
Slot:
ich habe gerade folgendes Problem:
Eine Kamera ruft eine Callback-Funktion auf, wenn sie ein neues Bild zur Verfügung stellen kann. Die Callback-Funktion weiß, zu welchem Objekt sie gehört. Jetzt will ich in der Callback-Funktion ein Signal aussenden, dass ein neues Bild zur Verfügung steht.
Mit diesem Signal habe ich einen Slot verknüpft, der dann das geholte Bild verarbeiten soll.
Das will ich machen, damit die Callback-Funktion nicht zu lange beschäftigt ist, da ich sonst eine hässliche Zeitverzögerung in meine Ausgabe bekomme.
Problem dabei: Der Slot wird leider nie aufgerufen. Wenn ich eine Ausgabe direkt vor die emit-Zeile packe, wird diese ausgegeben, die Callback-Funktion läuft also auf jeden Fall durch.
Ich verstehe leider nicht, warum das so ist. Kann mir jemand helfen?
Gruß
Karocke
Hier mal ein paar Codeschnipsel:
im Konstruktor:
Code: Alles auswählen
MyClass::MyClass() {
[...]
CONNECT(this, SIGNAL(frameReady()), this, SLOT(processFrame()); Code: Alles auswählen
MyClass::onFrameReadyCallback(CAMERA_API_ARGUMENT_TYPE arg) {
MyClass* This = reinterpret_cast<MyClass*>(arg.m_Parameter);
[...]
emit This->frameReady();
}Code: Alles auswählen
void MyClass::processFrame() {
// Wird leider nicht aufgerufen
}