我正在使用win32eventPython模块与另一个程序(基于C)创建的互斥体进行交互
我的代码打开一个互斥体,然后等待它:
hWait = win32event.OpenMutex(win32con.MUTEX_ALL_ACCESS, False, "mutexname")
win32event.WaitForSingleObject(hWait, 20000)
这段代码的问题在于,如果互斥体尚未创建(例如,如果python程序在C程序创建互斥体之前尝试打开互斥体),它就会失败。在
在创建互斥体之前如何阻止?是否有任何Python或library方法允许这样做?在
正如@manuell(在评论中)指出的,简单的解决方案是循环直到创建互斥体,静默地捕捉互斥体尚不存在时引发的错误:
根据情况的具体情况,例如,您可能希望显式地在循环内部休眠一点,将等待的循环放入单独的线程中,或者将其转换为生成器或协同程序,或者用它来触发一个win32事件,在另一个已经运行的线程中运行某个东西(请参阅我的另一个关于如何等待事件发生的答案)。在
请注意,在使用
win32event.WaitForSingleObject
时,可以简单地使用win32event.INFINITE
无限期地阻止,直到事件发生,而不是指定一些任意但足够长的时间等待(20000),如:例如,当您需要告诉另一个线程中的代码互斥体已打开时,这很有用。在
由于等待互斥体(如果尚未创建)将失败,因此我们将创建一个事件,以便在互斥体打开时触发。在
^{pr2}$然后启动一个等待事件的线程:
要模拟另一个程序,请在一段时间后启动另一个线程来创建互斥体:
最后,运行循环,直到互斥体打开,然后设置事件。在
注意
setEvent
调用。在因此,当运行代码时,一段时间后,
waiter
线程会收到互斥体现在已打开的通知。在相关问题 更多 >
编程相关推荐