我不熟悉WINAPI,我正在寻找一种方法来替换在一个例子中使用的WaitForMultipleObjects,我只使用Qt移植到Qt.可能吗?
编辑:(根据评论中的要求提供更多信息)
第三方API提供了一系列事件:
HANDLE m_hEv[MAX_EV];
Run Code Online (Sandbox Code Playgroud)
在线程的endles-loop中,程序等待这样的事件:
WaitForMultipleObjects(m_EvMax, m_hEv, FALSE ,INFINITE )
Run Code Online (Sandbox Code Playgroud)
这种HANDLE类型似乎无效*.所以我想知道,如果任何Qt类可以观察m_hEv进行更改并解锁线程执行.
WaitForMultipleObjects在WinAPI之外没有简单的移植方式.WinAPI具有"优势",即所有可锁定资源(套接字,文件,进程)提供相同的通用非类型安全HANDLE,这是您的void*.与根据资源类型具有不同锁定和信令方式的其他平台不同,WinAPI中的事件处理在很大程度上独立于资源.然后WaitForMultipleObjects可以存在类似的通用函数,它不需要关心谁生成了HANDLE.因此,您必须了解代码尝试执行的操作,并在每个方案中以不同方式模拟它.
最大的区别在于WaitForMultipleObjects第三个参数,在您的情况下为FALSE.这意味着只要等待数组的任何单个事件发生,它就会退出等待.这是更简单的方案,可以用a代替QWaitCondition.
m_hEv,您将传递QWaitCondition*到代表事件的代码(最有可能通过WinAPI SetEvent(m_hEv[x]))QWaitCondition::wait().SetEvent(),做QWaitCondition::wakeOne().第三个参数是否为TRUE,然后WinAPI代码等待,直到发出所有m_hEv事件的信号.这种功能的既定名称是同步屏障,它也可以模拟QEventCondition,但不会出现在Qt框中.我自己从不需要做任何事情,但是有一些想法如何去做:
| 归档时间: |
|
| 查看次数: |
2939 次 |
| 最近记录: |