0

我的 wxPython 应用程序中有一个后台线程来保持 GUI 响应。在我的后台线程的“运行”方法中有一个 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 回答