QPushButton->setEnabled() in 2.threads erzeugt RuntTimeError

Alles rund um die Programmierung mit Qt
Antworten
Hans_Wurst
Beiträge: 36
Registriert: 8. Mai 2008 16:44

QPushButton->setEnabled() in 2.threads erzeugt RuntTimeError

Beitrag von Hans_Wurst »

Hallo,

ein Klick auf den Button sendet bei mir ein SIGNAL zu meinem SLOT buttonConnectCamClicked(). Dieser soll den Button erst mal disablen, welcher nach ausführen eines zweiten threads (die member-Funktion connectDisconnectCam()) wieder enabled werden soll. Der zweite thread benötigt ca. 2 sekunden, bis er den Button wieder enablen würde.

Kommentiere ich nun die Zeile zum enablen oder die zum disablen des Buttons aus, läuft das Programm durch. Lasse ich jedoch beide Zeilen (wie im Code zu sehen) stehen, bekomme ich diese Fehlermeldung:
  • ASSERT failure in QCoreApplication::sendEvent: "Cannot send events to objects owned by a different thread. Current thread 147fe5c0. Receiver '' (of type 'QPushButton') was created in thread 3e4710", file kernel\qcoreapplication.cpp, line 505
    QObject::killTimers: timers cannot be stopped from another thread

Code: Alles auswählen

void serialPort::buttonConnectCamClicked(void)
{
    /* disable the button */
    pButtonGetComPorts->setEnabled(false);

    /* call in another thread: connectDisconnectCam(); */
    QFuture<void> future = QtConcurrent::run(this, &serialPort::connectDisconnectCam);
}

void serialPort::connectDisconnectCam(void)
{
    // .... ca. 2 Sekunden Wartezeit ...
    pButtonGetComPorts->setEnabled(true);
}
Wenn ich das ganze nun umgehe, indem ich ein weiteres SIGNAL/SLOT-paar erzeuge, welches am Ende den Button wieder enabled, stürzt mir das Programm zwar nicht mehr ab, aber ich erhalte dann diese Meldung im QT_Creator:
  • QWinEventNotifier: event notifiers cannot be disabled from another thread
Scheint also auch nicht gerade der perfekte Weg zu sein. Hätte jemand einen Tipp für mich wie ich das richtig lösen könnte?
Antworten