2016-05-23 15 views
0

ich diesen Code schrieb eine Maus in der Mitte des BildschirmsCode nicht hält nach dem Faden ging

def lockmouse(): 
print "here" 
while True: 
    win32api.SetCursorPos((GetSystemMetrics(0)/2,GetSystemMetrics(1)/2)) 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,GetSystemMetrics(0)/2,GetSystemMetrics(1)/2,0,0) 
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,GetSystemMetrics(0)/2,GetSystemMetrics(1)/2,0,0) 


t = threading.Thread(target=lockmouse()) 
command = "lockmouse" 
    if "lockmouse" in command: 
     if t.is_alive==False: 
      t.start() 
      time.sleep(3) 
      t._Thread_stop() 

und sein nicht halten zu gehen nach dem t.start() zu sperren. Ich habe verschiedene versucht, mit Methoden, um den Thread zu stoppen, aber es ist sogar nicht nach dieser Zeile.Kann jemand wissen, was das Problem?

+0

Es sollte 'target = lockmouse' sein. Rufen Sie nicht 'lockmouse()' auf. Es wird niemals 't.start()' ausführen, da sich der aktuelle Thread in einer Endlosschleife befindet. Die Zielfunktion wird im neuen Thread aufgerufen, wenn Sie sie starten. Um den Thread elegant zu beenden, sollte die 'while'-Schleife eine globale Variable oder ein Objekt testen, das als Parameter übergeben wurde, wie zum Beispiel ein' threading.Event'. – eryksun

Antwort

0

Es könnte die Tatsache sein, dass Ihre Funktion nicht richtig eingerückt ist. Es sollte sein:

def foo(): 
    return 'bar' 

Auch scheinen Sie nur einen einzigen Thread zu starten. Was ist der Punkt?

EDIT:

Ich habe erkannt, dass Ihre Funktion eine Endlos-Schleife hat. Das Programm kann nicht von t.start() aus weiterlaufen, weil es darauf warten muss, dass diese Funktion die Ausführung beendet, was nicht der Fall ist, weil es eine While-Schleife gibt. Entweder müssen Sie Ihr Programm irgendwie neu strukturieren, oder wenn Sie es so behalten möchten, wie es ist, finden Sie in dieser Antwort, wie man vermeidet, auf einen Thread zu warten.

How to avoid waiting for a thread to finish execution - Python