首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

求解OpenURL调用时被阻塞了,进程还在继续,什么都做不了.解决办法

2012-01-16 
求解OpenURL调用时被阻塞了,进程还在继续,什么都做不了...求解OpenURL调用时会调用InternetOpenUrl()这个

求解OpenURL调用时被阻塞了,进程还在继续,什么都做不了...
求解OpenURL调用时会调用InternetOpenUrl()这个阻塞式函数,但是网络不怎么好的话他就一直停在这了...
搜了下本站的以前解决办法 try{} catch{}好像没啥效果,还是停在那,进程仍然在继续  
希望可以帮分析下哪里出的问题?有没有其他的可以替换OpenURL的不是这种阻塞式的函数,当URL没打开或者不存在的时候返回那种叉叉的就行...
多线程的话里面有什么函数可以解决这个问题的?刚开始看这个,还没搞清楚内容~
最好可以有代码段看下,刚进入这领域..蛋疼中

部分代码如下

C/C++ code
OpenOnLinePicture(_T("..."),1);OpenOnLinePicture(_T("..."),2);OpenOnLinePicture(_T("..."),3);HRESULT CLauncherDlg::OpenOnLinePicture(LPCTSTR url, int num){    IStream *pStm;      DWORD dwFileSize,dwByteRead;    //读取网页上图片文件,实际是个CHttpFile指针    CInternetSession session("HttpClient");        CFile* httpFile = (CFile*)session.[color=#FF0000]OpenURL[/color](url,0);        if (httpFile!=INVALID_HANDLE_VALUE)            {                dwFileSize=  httpFile->GetLength();//获取文件字节数                if (dwFileSize==0xFFFFFFFF)                    return E_FAIL;            }            else            {                return E_FAIL;            }            //分配全局存储空间            HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);            LPVOID pvData = NULL;            if (hGlobal == NULL)                return E_FAIL;            if ((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存块                return E_FAIL;            //把文件读入内存缓冲区            dwByteRead = httpFile->Read(pvData,dwFileSize);        GlobalUnlock(hGlobal);            HRESULT result = CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);    if(result != S_OK)        return E_FAIL;    //装入图形文件            switch(num)    {    case 1:        result = pPic1.Load(pStm);        break;    case 2:        result = pPic2.Load(pStm);        break;    case 3:        result = pPic3.Load(pStm);        break;    }           httpFile->Close();//关闭打开的文件       return result;}


[解决办法]
根据个人经验,不要用InternetOpenUrl这种封装过死的函数,根据你的描述,它里面好象是阻塞了。
直接使用异步socket写一个接收就行了。
怕麻烦可以参考http_fetcher开源项目

热点排行