您现在的位置: 中国教师站 >> 教师关注 >> 电脑技术 >> 编程技术 >> Visual C >> 正文

Google
WIN32多线程程序设计学习笔记(第六章 上)
作者:Siny 文章来源:中国教师站cn-teacher 点击数: 更新时间:2007-4-22 11:28:25

WIN32多线程程序设计学习笔记(第六章 上)

 

我们知道当程序调用I/O设备处理一些事情时,让主程序停下来干等I/O的完成是没有效率的。对这个问题有下面几种解决方法:

方法一:使用另一个线程进行I/O。但从以前的学习中也知道,协调线程间的关系是一件麻烦的事情,需要小心的设计;所以这个方案可行,但是麻烦。

方法二:使用overlapped I/O。正如书上所说:“overlapped I/O是WIN32的一项技术,你可以要求操作系统为你传送数据,并且在传送完毕时通知你。这项技术使你的程序在I/O进行过程中仍然能够继续处理事务。事实上,操作系统内部正是以线程来I/O完成overlapped I/O。你可以获得线程的所有利益,而不需付出什么痛苦的代价”。哈!这真是一个好方法!!!

 

下面的内容就是来谈怎样使用overlapped I/O:

 

进行I/O操作时,指定overlapped方式

使用CreateFile(),将其第6个参数指定为FILE_FLAG_OVERLAPPED,就是准备使用overlapped的方式构造或打开文件;如果采用overlapped,那么ReadFile()、WriteFile()的第5个参数必须提供一个指针,指向一个OVERLAPPED结构。OVERLAPPED用于记录了当前正在操作的文件一些相关信息。

//下面引用书上的例子,来说明overlapped

//功能:从指定文件的1500位置读入300个字节

int main()

{

    BOOL rc;

    HANDLE hFile;

    DWORD numread;

    OVERLAPPED overlap;

    char buf[512];

    char szPath=”x:\xxxxxxxx”;

    //检查系统,确定是否支持overlapped,(NT以上操作系统支持OVERLAPPED)

    CheckOsVersion();

    // 以overlapped的方式打开文件

    hFile = CreateFile( szPath,

                    GENERIC_READ,

                    FILE_SHARE_READ|FILE_SHARE_WRITE,

                    NULL,

      &

[1] [2] [3] [4] [5] [6] 下一页

相关专题:
 
 网友评论:(评论内容只代表网友观点,与本站立场无关!)
| 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 |
中国教师站

中国教师站 版权所有 Copyright © 2006-2020 All Rights Reserved 站长:Sina & Siny
[备用域名:www.JXZYW.Com] 有事请留言有事请留言
【实力成就精品 诚信呵护品牌】

信息产业部备案
苏ICP备06018635号