我正在将对FTDI驱动程序的支持添加到现有的代码库中,该代码库使用重叠的IO和IOCompletionPort与串行端口和管道通信。我希望直接与FTD2xx.dll接口,而不是使用虚拟com端口函数(000071%29.pdf)。
问题是,据我所知,FTD2xx.dll模拟重叠的IO,但与IOCompletionPort不兼容。但是,无论何时在驱动程序内部状态中发生任何更改,都可以传递设置的事件。我正在更新的程序具有非常低的吞吐量,但需要非常低的延迟(与嵌入式系统的实时通信)。
因此,我的问题是,如何等待事件被发出信号或IOCompletionPort不为空?最好不要使用任何其他线程。
或者,我可以使用RegisterWaitForSingleObject和回调一起使用,该回调会向IOCompletionPort发布一条消息吗?我知道这使用线程池,在系统繁忙的情况下,这会增加延迟吗?(我可以将自己的三个设置为高优先级,但我对线程池的优先级一无所知)。
编辑:,如果我在RegisterWaitForSingleObject中使用WT_EXECUTEINWAITTHREAD标志,这个“侍者线程”是什么线程,它有什么优先级?
发布于 2013-11-22 16:38:19
IOCP不是一个可等待的对象,因此不能直接与任何等待函数一起使用它。您可以做的是通过CreateEvent()创建一个单独的可等待事件,然后有一个单独的线程调用GetQueuedCompletionStatus/Ex(),并在IOCP数据包到达时向事件发出信号。
https://stackoverflow.com/questions/20147248
复制相似问题