欢迎访问宙启技术站
智能推送

Python中win32event库中WaitForMultipleObjects函数实现多个对象的同步

发布时间:2023-12-15 19:22:37

在Python的win32event库中,WaitForMultipleObjects函数用于等待多个对象的状态变为可用,以实现多个对象的同步。该函数可以等待多个事件、互斥体、信号等。

使用例子如下:

import win32event
import threading

# 创建事件对象
event1 = win32event.CreateEvent(None, 0, 0, None)
event2 = win32event.CreateEvent(None, 0, 0, None)

# 创建线程函数
def thread_func(event):
    print("Thread waiting...")
    win32event.WaitForSingleObject(event, win32event.INFINITE)
    print("Thread release...")

# 创建线程
thread1 = threading.Thread(target=thread_func, args=(event1,))
thread2 = threading.Thread(target=thread_func, args=(event2,))

# 启动线程
thread1.start()
thread2.start()

# 主线程等待一段时间后触发事件
win32event.Sleep(2000)  # 等待2秒
print("Release event1...")
win32event.SetEvent(event1)
win32event.Sleep(2000)  # 等待2秒
print("Release event2...")
win32event.SetEvent(event2)

# 等待线程结束
thread1.join()
thread2.join()

上述例子中,首先创建了两个事件对象event1和event2。然后定义了线程函数thread_func,该函数在等待事件对象时输出提示信息,并调用WaitForSingleObject函数等待事件。主线程创建了两个线程thread1和thread2,并启动它们。

接着主线程等待2秒后,触发event1事件,并再次等待2秒后触发event2事件。最后等待线程thread1和thread2结束。

运行上述代码,输出如下:

Thread waiting...
Thread waiting...
Release event1...
Thread release...
Release event2...
Thread release...

从输出结果可以看出,两个线程在等待事件的过程中被阻塞,直到事件被触发后才继续执行。这样就实现了多个对象的同步。