<p>请注意,在使用<code>win32event.WaitForSingleObject</code>时,可以简单地使用<code>win32event.INFINITE</code>无限期地阻止,直到事件发生,而不是指定一些任意但足够长的时间等待(20000),如:</p>
<pre><code>win32event.WaitForSingleObject(waitable, win32event.INFINITE)
</code></pre>
<p>例如,当您需要告诉另一个线程中的代码互斥体已打开时,这很有用。在</p>
<p>由于等待互斥体(如果尚未创建)将失败,因此我们将创建一个事件,以便在互斥体打开时触发。在</p>
^{pr2}$
<p>然后启动一个等待事件的线程:</p>
<pre><code>def wait_for_opening(open_evt):
win32event.WaitForSingleObject(open_evt, win32event.INFINITE)
print("Got notified that mutex is now open.")
waiter = threading.Thread(target=wait_for_opening, args=(mutex_open,))
waiter.start()
</code></pre>
<p>要模拟另一个程序,请在一段时间后启动另一个线程来创建互斥体:</p>
<pre><code>def delayed_create():
time.sleep(1)
m = CreateMutex(None, True, u"mutexname")
creator = threading.Thread(target=delayed_create)
creator.start()
</code></pre>
<p>最后,运行循环,直到互斥体打开,然后设置事件。在</p>
<pre><code>while True:
try:
hWait = win32event.OpenMutex(MUTEX_ALL_ACCESS, False, "mutexname")
except pywintypes.error:
pass
else:
win32event.SetEvent(mutex_open)
break
</code></pre>
<p>注意<code>setEvent</code>调用。在</p>
<p>因此,当运行代码时,一段时间后,<code>waiter</code>线程会收到互斥体现在已打开的通知。在</p>