Ich habe eine Klasse:
%Vor%In seinem Konstruktor habe ich:
%Vor%Wenn ich den Destruktor dieser Klasse aufgerufen habe, bekomme ich die Fehlermeldung:
%Vor%Aber wenn ich versuchte, den monitorThread im Destruktor der Klasse centralDataPool zu beenden,
%Vor%Ich bekomme Speicherverlust.
Was ist der richtige Weg, um einen Thread während der Zerstörung seines Besitzerobjekts zu beenden?
Sie sollten beachten, dass Sie, wenn eine Schleife in einer Funktion Ihres Threads ausgeführt wird, diese explizit beenden sollten, um den Thread ordnungsgemäß zu beenden.
Sie können in Ihrer Klasse eine Membervariable namens finishThread
haben, die auf true
gesetzt werden soll, wenn die Anwendung geschlossen wird. Stellen Sie einfach einen Slot zur Verfügung, in dem Sie den Wert für finishThread
festlegen. Wenn Sie den Thread beenden möchten, geben Sie ein Signal aus, das mit einem true
-Wert an diesen Slot angeschlossen ist. finishThread
sollte in der Schleifenbedingung bereitgestellt werden, um es zu beenden, wenn es auf true
gesetzt ist. Warten Sie danach, bis der Thread für einige Sekunden ordnungsgemäß beendet wurde, und erzwingen Sie, dass der Thread beendet wird, wenn er nicht beendet wurde.
Sie können also in Ihrem Destruktor haben:
%Vor%Tags und Links c++ qt multithreading qthread