从Python调用RegisterWaitForSingleObject

2024-04-24 09:49:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在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”错误。你知道吗

如有任何意见,我将不胜感激。你知道吗


Tags: 数据函数namenonedefargsctypesfn