结束程序中期运行

rec*_*gle 2 python exit message-pump pythoncom

pythoncom.PumpMessages()

根据我的理解,这条线基本上告诉程序永远等待.为了我的目的,它似乎工作.但是,我希望能够在给定正确刺激的情况下结束该计划.如何结束上述行,或停止程序进一步运行.

Gre*_*egg 7

根据这些文档,pythoncom.PumpMessages():

泵送当前线程的所有消息,直到WM_QUIT消息.

因此,停止收集消息的一种方法是使用ctypes库将WM_QUIT消息发送到消息队列以调用PostQuitMessage:

ctypes.windll.user32.PostQuitMessage(0)
Run Code Online (Sandbox Code Playgroud)


Boa*_*niv 6

以下是使用计时器线程退出应用程序的示例:

import win32api
import win32con
import pythoncom
from threading import Timer

main_thread_id = win32api.GetCurrentThreadId()

def on_timer():
    win32api.PostThreadMessage(main_thread_id, win32con.WM_QUIT, 0, 0);

t = Timer(5.0, on_timer) # Quit after 5 seconds
t.start()

pythoncom.PumpMessages()
Run Code Online (Sandbox Code Playgroud)

PostQuitMessage()将仅从主线程工作,但然后主线程被阻止,所以它本身不是很有用.只有在将自己的自定义消息处理挂钩到消息循环中时,才能使用它.