我试图在Python中调用文件句柄上的RegisterWaitForSingleObject来检查是否有异步数据。我的理解是我可以用Python创建一个回调函数,把它传递给RegisterWaiForSingleObject,一旦有数据要读取,回调函数就会被调用。你知道吗
以下是我当前的实现:
def _decl(name, ret=None, args=(), module=kernel32):
fn = getattr(module, name)
fn.restype = ret
fn.argtypes = args
return fn
WAITORTIMERCALLBACK = ctypes.WINFUNCTYPE(
None, # return value: VOID
ctypes.wintypes.LPVOID, # PVOID lpParameter
ctypes.wintypes.BOOL # BOOLEAN TimerOrWaitFired
)
new_wait_object = HANDLE()
RegisterWaitForSingleObject = _decl(
"RegisterWaitForSingleObject",
BOOL,
(ctypes.POINTER(HANDLE), HANDLE, WAITORTIMERCALLBACK, LPVOID, DWORD, DWORD)
)
def waitortimercallback(lp_parameter, timer_fired):
print('Data available')
c_waitortimercallback = WAITORTIMERCALLBACK(waitortimercallback)
result = RegisterWaitForSingleObject(
ctypes.byref(new_wait_object), # phNewWaitObject
overlapped.hEvent, # hObject
c_waitortimercallback, # Callback
None, # Context
timeout_mil, # dwMilliseconds
0, # dwFlags
)
我不确定我做的每件事(或任何事)是否都正确。但我以前在WaitForSingleObject上取得过成功。不幸的是,internet上没有RegisterWaitForSingleObject和Python的示例。我可能错误地定义了一些类型。你知道吗
当我运行代码时,RegisterWaitForSingleObject返回1(success),但一旦写入数据,我就会收到“Segmentation fault”错误。你知道吗
如有任何意见,我将不胜感激。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐