OVERLAPPED

OVERLAPPED即OVERLAPPED是一個包含了用於異步輸入輸出的信息的結構體。

基本介紹

  • 中文名:OVERLAPPED
  • 外文名:OVERLAPPED
  • 功能:用於異步輸入輸出的信息的結構體
介紹,結構類型聲明,結構作用,

介紹

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

結構類型聲明

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;

結構作用

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.

相關詞條

熱門詞條

聯絡我們