複製鏈接
請複製以下鏈接發送給好友

OVERLAPPED

鎖定
OVERLAPPED即OVERLAPPED是一個包含了用於異步輸入輸出的信息的結構體。
中文名
OVERLAPPED
外文名
OVERLAPPED
功    能
用於異步輸入輸出的信息的結構體

OVERLAPPED基本介紹

The OVERLAPPED structure contains information used in asynchronous input and output (I/O).

OVERLAPPED結構類型聲明

OVERLAPPED結構類型聲明如下:
第一種聲明
typedef struct _OVERLAPPED {
DWORD Internal;
DWORD InternalHigh;
DWORD Offset;
DWORD OffsetHigh;
HANDLE hEvent;
} OVERLAPPED
參數説明
Internal: 預留給操作系統使用。它指定一個獨立於系統的狀態,當GetOverlappedResult函數返回時沒有設置擴展錯誤信息ERROR_IO_PENDING時有效。
InternalHigh: 預留給操作系統使用。它指定長度的數據轉移,當GetOverlappedResult函數返回TRUE時有效。
Offset: 該文件的位置是從文件起始處的字節偏移量。調用進程設置這個成員之前調用ReadFile或WriteFile函數。當讀取或寫入命名管道和通信設備時這個成員被忽略設為零。
OffsetHigh: 指定文件傳送的字節偏移量的高位字。當讀取或寫入命名管道和通信設備時這個成員被忽略設為零。
hEvent: 在轉移完成時處理一個事件設置為有信號狀態。調用進程集這個成員在調用ReadFile、 WriteFile、TransactNamedPipe、 ConnectNamedPipe函數之前。
第二種聲明
typedef struct _OVERLAPPED {
ULONG_PTR Internal; //操作系統保留,指出一個和系統相關的狀態
ULONG_PTR InternalHigh; //指出發送或接收的數據長度
union {
struct {
DWORD Offset; //文件傳送的字節偏移量的低位字
DWORD OffsetHigh; //文件傳送的字節偏移量的高位字
};
PVOID Pointer; //指針,指向文件傳送位置
};
HANDLE hEvent; //指定一個I/O操作完成後觸發的事件
} OVERLAPPED, *LPOVERLAPPED;

OVERLAPPED結構作用

I/O設備處理必然讓主程序停下來乾等I/O的完成,解決這個問題,可以使用OVERLAPPED。
OVERLAPPED I/O是WIN32的一項技術, 你可以要求操作系統為你傳送數據,並且在傳送完畢時通知你。這項技術使你的程序在I/O進行過程中仍然能夠繼續處理事務。事實上,操作系統內部正是以線程來I/O完成OVERLAPPED I/O。你可以獲得線程的所有利益,而不需付出什麼痛苦的代價。也就是説,OVERLAPPED主要是設置異步I/O操作,異步I/O操作是指應用程序可以在後台讀或者寫數據,而在前台做其他事情。
Allen denver在他的《Serial Communication in Win32》中是這樣解釋OVERLAPPED I/O的:我個人認為還是比較準確的
Overlapped I/O is not as straightforward as nonoverlapped I/O, but allows more flexibility and efficiency. A port open for overlapped operations allows multiple threads to do I/O operations at the same time and perform other work while the operations are pending. Furthermore, the behavior of overlapped operations allows a single thread to issue many different requests and do work in the background while the operations are pending.