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