Frage

QThread::terminate() Dokumentation besagt, dass es abgeraten einen Thread zu beenden, indem Sie diese Funktion aufrufen.
In meinem Programm, ich brauche einen Thread zu beenden, bevor es die Ausführung beendet. Der Faden wird die Durchführung einige schwere Berechnung und ich möchte der Benutzer die Kontrolle zu stoppen Berechnung haben.
Wie kann ich tun, dass anstelle QThread::terminate() zu nennen?

War es hilfreich?

Lösung

Set ein Flag von außerhalb des Fadens, der durch die Berechnung in dem Faden überprüft wird und die Berechnung beendet, wenn das Flag gesetzt ist.

Andere Tipps

Flags zu verwenden ist eine offensichtliche und die häufigste Art und Weise, den Trick zu tun, aber wenn Sie auf einem Linux arbeiten / Unix-Plattform würde ich raten Sie Rohre stattdessen zu verwenden. Ich hatte das gleiche Problem, bei dem ich eine Flagge verwendet (dies den Code threadunsafe macht, und Fehler einer solchen Flagge sind, um Spuren schwer sich aus), dann änderte ich die Implementierung Verwendung Rohren, die eine effiziente Möglichkeit, das Nötige zu tun waren.

Wenn Sie möchten, für eine Linux-Plattform kann ich Ihnen zeigen, wie Rohre verwenden, um eine QThread zu beenden.

Sie können auch Fenster haben Äquivalent von Rohren, die ich weiß nicht viel über, da ich nicht viel von der Programmierung auf Windows-Plattform getan haben.

Hope, das hilft

Am besten ist es Flag + Mutex zu verwenden, die die Lösung Thread-sicher machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top