0

GUI の応答性を維持するために、wxPython アプリケーションにバックグラウンド スレッドがあります。バックグラウンド スレッドの "run" メソッドに while(true) ループがありますが、GUI スレッドから呼び出すことがある他のメソッドもあります。バックグラウンド スレッドの別のメソッドを実行している間に実行メソッドを停止する方法はありますか?

4

2 に答える 2

1

次のようなコードがあるとしましょう。

import threading
import time

class MyWorkerThread(threading.Thread):
    def run():
        while True:
            # Do some important stuff here
            foo()
            time.sleep(0.5)

    def foo():
        # Do something important here too
        pass

class SomeRandomButton:
    def __init__(worker_thread):
        self.worker_thread = worker_thread

    # Function called when button is clicked
    def on_button_clicked():
        self.worker_thread.foo();

my_worker_thread = MyWorkerThread()
my_button = SomeRandomButton(my_worker_thread)

# Start thread
my_worker_thread.run()

# Initialize the GUI system (creating controls etc.)

# Start GUI system
GUISystem.run()

上記のコードは実際には何もせず、実行さえしませんが、これを使用して、スレッド オブジェクト ( ) 内の関数をそのMyWorkerThread.foo特定のスレッドから呼び出す必要はなく、任意のスレッドから呼び出すことができることを示します。 .

マルチスレッドについて、また複数のスレッドが同時にアクセスすることからデータを保護するためのセマフォについてもっと読みたいと思うかもしれません。

于 2012-07-24T12:57:05.897 に答える
0

好きにする

while(alive):
  while(not stopped):
     """
        thread body

     """

そして、スレッドを一時停止できる他の場所

stopped=True

そして使うより

stopped = True
alive = False

スレッドを終了するには

于 2012-07-24T12:40:07.430 に答える