使用 CreateFile(在 Windows 平台上的 C++ 中)打开串行端口连接时,您可以选择将其打开为重叠或非重叠。
如果作为非重叠 ReadFile 打开,或者 WriteFile 调用被阻塞,即它在准备好之前不会返回。
我的问题是这些函数调用在单独的线程中执行时是否会相互阻塞。如果一个线程执行 ReadFile,那么另一个线程是否能够在所有读取完成之前执行 WriteFile?
使用 CreateFile(在 Windows 平台上的 C++ 中)打开串行端口连接时,您可以选择将其打开为重叠或非重叠。
如果作为非重叠 ReadFile 打开,或者 WriteFile 调用被阻塞,即它在准备好之前不会返回。
我的问题是这些函数调用在单独的线程中执行时是否会相互阻塞。如果一个线程执行 ReadFile,那么另一个线程是否能够在所有读取完成之前执行 WriteFile?
是的,他们有。来自 MSDN:
“如果一个线程在等待其 I/O 操作完成时被阻塞,则随后调用通信 API 的所有其他线程将被阻塞,直到原始操作完成。例如,如果一个线程正在等待 ReadFile 函数返回,则任何其他发出 WriteFile 函数的线程将被阻塞。”
(http://msdn.microsoft.com/en-us/library/ff802693.aspx#serial_topic4)