Wie starte und beende ich den Thread?

8

Entschuldigung für die alte Frage. Ich habe es geklärt. Wie kann ich einen Stop-Thread mit meiner schlechten Thread-Klasse starten?

BEARBEITEN : Es ist in Schleife, ich möchte es am Anfang des Codes neu starten. Wie kann ich Start-Stopp-Neustart-Stopp-Neustart?

Meine Klasse:

%Vor%

Im Hauptcode möchte ich:

%Vor%     
user2229183 31.03.2013, 12:46
quelle

3 Antworten

6

Das ist David Heffernans Idee konkretisiert. Das folgende Beispiel wird für 1 Sekunde ausgeführt, dann für 1 Sekunde angehalten, dann für 1 Sekunde ausgeführt und so weiter.

%Vor%     
unutbu 31.03.2013, 14:14
quelle
11

Sie können einen Thread nicht stoppen und neu starten, da Sie% code_% nicht mehr aufrufen können, nachdem die Methode start() beendet wurde. Sie können die Methode jedoch effektiv anhalten und die Ausführung später fortsetzen, indem Sie eine run() -Variable verwenden, um Nebenläufigkeitsprobleme beim Überprüfen oder Ändern des Ausführungsstatus zu vermeiden.

threading.Condition -Objekte haben ein zugeordnetes Condition -Objekt und Methoden, um darauf zu warten, dass es freigegeben wird, und werden alle wartenden Threads benachrichtigen, wenn dies auftritt. Hier ist ein Beispiel aus dem Code in Ihrer Frage, das zeigt, dass dies getan wird. In diesem Fall habe ich die threading.Lock -Variable zu einem Teil von Condition -Unterklasseninstanzen gemacht, um die Implementierung besser zu kapseln, indem die Einführung zusätzlicher globaler Variablen vermieden wird:

%Vor%     
martineau 31.03.2013 21:38
quelle
3

Die Implementierung von stop() würde folgendermaßen aussehen:

%Vor%

Wenn Sie neu starten möchten, können Sie einfach eine neue Instanz erstellen und diese starten.

%Vor%

Die Dokumentation für Thread macht deutlich, dass start() Methode kann nur einmal für jede Instanz der Klasse aufgerufen werden.

Wenn Sie einen Thread pausieren und fortsetzen möchten, müssen Sie eine Bedingung verwenden Variable .

    
David Heffernan 31.03.2013 12:50
quelle

Tags und Links