读书人

异步io中用WaitforsingleOjbect是不是

发布时间: 2012-11-08 08:48:11 作者: rapoo

异步io中用WaitforsingleOjbect是不是个有问题的设计

C/C++ code
#include<windows.h>#include <stdio.h>int main(){#define  BUFFER_SIZE    1024*1024*1024        //1GB    char buf[BUFFER_SIZE];        HANDLE hfile;        OVERLAPPED ol;        //初始化        memset(buf,0,BUFFER_SIZE);    memset(&ol,0,sizeof(ol));            hfile=CreateFile("g:\\VS2012_RC_ULT_CHS.iso",        GENERIC_READ | GENERIC_WRITE,        FILE_SHARE_READ|FILE_SHARE_WRITE,        NULL,        OPEN_EXISTING,        FILE_FLAG_OVERLAPPED,NULL        );        if(INVALID_HANDLE_VALUE==hfile)    {        printf("opend file erorr\n");        return        -1;    }            ol.Offset=0;        DWORD numRead;            BOOL bRet=ReadFile(hfile,buf,BUFFER_SIZE,&numRead,&ol);        if(bRet)    {            }        else    {        if(ERROR_IO_PENDING==GetLastError())        //说明在读        {                                    //难道我在这里等待吗?? 等待岂不是傻乎?            WaitForSingleObject(hfile,-1);            //等多久??            //查询结果                        bRet=GetOverlappedResult(hfile,&ol,&numRead,TRUE);                        if(TRUE==bRet)        //读取完毕            {                            }            else                //出错了            {                            }                                }    }                CloseHandle(hfile);                return 0;            }




异步肯定要比同步好, 如果不好,设计它就是吃多了,

我提供的代码, 大家看吧,用了WaitforSingleObject,不用不行,不知道什么时候读取完毕?

可是用了, 和同步有什么区别,不也得等待, 这不是扯嘛?


问题2:为什么说 重叠io有事件对象这东西,我的代码里怎么没有??



[解决办法]
支持楼上,异步和同步的却别 很大 ,处理方式 也 大不相同 ,不知道 楼主 用过 WinINet 没有, 简单的 说 同步是要 一直 阻塞下去 ,而异步 是 直接 返回 ,但是在 另一个线程中进行处理结果,或者是在回调函数中 进行处理结果 。

读书人网 >VC/MFC

热点推荐