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

使用win32event的WaitForMultipleObjects函数等待多个对象

发布时间:2023-12-15 19:13:31

WaitForMultipleObjects是一个Windows操作系统的函数,它用于等待多个内核对象的信号。该函数可以等待多个事件对象,互斥对象或线程对象中的一个或多个。它会阻塞当前线程,直到有一个或多个对象变为有信号状态。下面是一个简单的使用例子:

import win32event
import threading
import time

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

# 事件处理函数
def event_handler(event, name):
    print(f'{name} waiting...')
    win32event.WaitForSingleObject(event, win32event.INFINITE)
    print(f'{name} received signal!')

# 创建两个线程,每个线程等待不同的事件对象
thread1 = threading.Thread(target=event_handler, args=(event1, 'Thread 1'))
thread2 = threading.Thread(target=event_handler, args=(event2, 'Thread 2'))

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

# 主线程等待一段时间后,通过SetEvent设置事件对象为有信号状态
time.sleep(5)
win32event.SetEvent(event1)

# 再次等待一段时间后,通过SetEvent设置第二个事件对象为有信号状态
time.sleep(5)
win32event.SetEvent(event2)

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

在上面的例子中,首先我们使用win32event模块的CreateEvent函数创建了两个事件对象event1和event2。接下来,我们定义了一个事件处理函数event_handler,它会等待传入的事件对象进入有信号状态。然后,我们创建了两个线程,每个线程分别等待不同的事件对象。在主线程中,我们通过SetEvent函数将事件对象设置为有信号状态。当事件对象被设置为有信号状态后,对应的线程会被唤醒继续执行。最后,我们使用join方法等待两个线程运行结束。

这个例子演示了如何在多线程中使用WaitForMultipleObjects函数等待多个事件对象。在实际应用中,可以使用该函数来实现多个线程之间的同步和协作。