C++ 重叠/异步I/O是如何工作的
我应该有这样的东西吗C++ 重叠/异步I/O是如何工作的,c++,asynchronous,synchronization,readfile,C++,Asynchronous,Synchronization,Readfile,我应该有这样的东西吗 readFile(.....&ol) //with overlapped while(1){ ////////..... waitforsingleobject(//ol.hevent); //// readfile(.....&ol) } 我注意到两个readfile都是从文件的开头读取的…为什么?在没有重叠/异步化的普通读取文件中,第二个读取文件将从第一个读取文件结束的地方开始。在文件上使用重叠I/O时,您会传递一个指向重叠对象的指针,在本例
readFile(.....&ol) //with overlapped
while(1){
////////.....
waitforsingleobject(//ol.hevent);
////
readfile(.....&ol)
}
我注意到两个readfile都是从文件的开头读取的…为什么?在没有重叠/异步化的普通读取文件中,第二个读取文件将从第一个读取文件结束的地方开始。在文件上使用重叠I/O时,您会传递一个指向重叠对象的指针,在本例中为
ol
OVERLAPPED
结构有两个变量,Offset
和OffsetHigh
。这两个变量组合成一个64位整数,Offset
为低阶DWORD,OffsetHigh
为高阶DWORD,并用作偏移量,以在以下位置执行I/O操作
因此,例如,如果您想在文件的第8个字节处启动一个
ReadFile
,您可以将Offset
变量设置为8,将OffsetHigh
变量设置为0,然后再将OVERLAPPED
传递给ReadFile
,以增加获得帮助的机会:1。发布一个完整的可编译代码片段来演示该行为。2.适当地标记问题。我建议MSDN是有关Microsoft API函数和参数的问题的参考。作为额外提示:这仅用于读取文件。对套接字使用异步I/O时,无需设置此成员。