QPushButton->setEnabled() in 2.threads erzeugt RuntTimeError
Verfasst: 5. Mai 2014 02:40
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:
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:
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);
}- QWinEventNotifier: event notifiers cannot be disabled from another thread