求解OpenURL调用时被阻塞了,进程还在继续,什么都做不了.解决办法
求解OpenURL调用时被阻塞了,进程还在继续,什么都做不了...
求解OpenURL调用时会调用InternetOpenUrl()这个阻塞式函数,但是网络不怎么好的话他就一直停在这了...
搜了下本站的以前解决办法 try{} catch{}好像没啥效果,还是停在那,进程仍然在继续
希望可以帮分析下哪里出的问题?有没有其他的可以替换OpenURL的不是这种阻塞式的函数,当URL没打开或者不存在的时候返回那种叉叉的就行...
多线程的话里面有什么函数可以解决这个问题的?刚开始看这个,还没搞清楚内容~
最好可以有代码段看下,刚进入这领域..蛋疼中
部分代码如下
------解决方案--------------------
根据个人经验,不要用InternetOpenUrl这种封装过死的函数,根据你的描述,它里面好象是阻塞了。
直接使用异步socket写一个接收就行了。
怕麻烦可以参考http_fetcher开源项目
求解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开源项目