所有栏目

OVERLAPPED

作者:爱百科

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.

热点导航
教育资讯 知道问答 公考资讯 司法考试 建筑知识 工作范文 大学排名 报考专业 学习方法 句子美文 秒知回答 作业解答 精选答案 知途问学