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

求解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开源项目