GetOverlappedResult函数详细解答
GetOverlappedResult
GetOverlappedResult函數返回指定文件、指定管道或通信設備上重疊操作的結果。
Windows95:此功能只適用于通訊設備或使用DeviceIoControl功能打開的檔案。
BOOL GetOverlappedResult ( HANDLE hFile、//文件、管道或通信設備的句柄 lpoverllapped, //指向重疊結構的指針 LPDWORD lpNumberOfBytesTransferred, //指向實際字節數的指針 BOOL bWait //等待標志 );參數
hFile
文件、命名管道或通信設備的句柄。這與調用ReadFile、WriteFile、ConnectNamedPipe、TransactNamedPipe、DeviceIoControl或WaitCommEvent函數啟動重疊操作時指定的句柄相同。
lpOverlapped
指向在開始重疊操作時指定的重疊結構的指針。
lpNumberOfBytesTransferred
指向32位變量的指針,該變量接收由讀或寫操作實際傳輸的字節數。對于TransactNamedPipe操作,這是從管道中讀取的字節數。對于DeviceIoControl操作,這是設備驅動程序返回的輸出數據字節數。對于ConnectNamedPipe或WaitCommEvent操作,這個值是未定義的。
bWait
指定函數是否應該等待掛起的重疊操作完成。如果為真,則在操作完成之前函數不會返回。如果為FALSE且操作仍然掛起,則函數返回FALSE,而GetLastError函數返回ERROR_IO_INCOMPLETE。
返回值
如果函數成功,則返回值為非零。
如果函數失敗,則返回值為零。要獲取擴展的錯誤信息,請調用GetLastError。
講話
GetOverlappedResult函數報告的結果是指定句柄的最后一個重疊操作的結果,該操作提供了指定的重疊結構,并且該操作的結果正在等待處理。當啟動該操作的函數返回FALSE,并且GetLastError函數返回ERROR_IO_PENDING時,將指示該操作。當I/O操作處于掛起狀態時,啟動該操作的函數將重疊結構的hEvent成員重置為無信號狀態。然后,當掛起操作完成時,系統將事件對象設置為有信號狀態。
在重疊結構中指定手動重置事件對象。如果使用自動重置事件對象,則在啟動重疊操作和調用GetOverlappedResult之間的任何其他等待操作中都不能指定事件句柄。例如,事件對象有時在某個等待函數中指定,以等待操作完成。當等待函數返回時,系統將自動重置事件的狀態設置為無信號狀態,隨后調用GetOverlappedResult,并將bWait參數設置為TRUE,這將導致函數被無限期阻塞。
如果bWait參數為TRUE,則GetOverlappedResult通過等待事件對象處于有信號狀態來確定掛起操作是否已經完成。
Windows 95和Windows 98:如果bWait為真,則重疊結構的hEvent成員不能為空。
windowsnt:如果重疊結構的hEvent成員為空,系統將使用hFile句柄的狀態在操作完成時發出信號。不建議為此使用文件、命名管道或通信設備句柄。使用事件對象更安全,因為在同一文件、命名管道或通信設備上執行多個同步重疊操作時可能會產生混淆。在這種情況下,無法知道是哪個操作導致對象的狀態被通知。
QuickInfo
windowsnt:需要3.1或更高版本。
Windows:需要Windows 95或更高版本。
Windows CE:不支持的。
Header:在winbase.h中聲明。
導入庫:使用kernel32.lib。
另請參閱
同步概述,同步函數,CancelIo, ConnectNamedPipe, CreateEvent, DeviceIoControl, GetLastError, OVERLAPPED, ReadFile, TransactNamedPipe, WaitCommEvent, WriteFile
總結
以上是生活随笔為你收集整理的GetOverlappedResult函数详细解答的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows API之WriteFil
- 下一篇: 同样是程序员,优秀的程序员能够月入5万甚