OVERLAPPED

生活百科 2023-01-26 08:57生活百科www.aizhengw.cn

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.
上一篇:谷歌移动服务 下一篇:Christopher Raynak

Copyright@2015-2025 www.aizhengw.cn 癌症网版板所有