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

多线程采撷网页程序,线程开到2000多就出错了,求大神帮忙

2013-09-14 
多线程采集网页程序,线程开到2000多就出错了,求大神帮忙!还有 有的时候下载出错。出错会调用// 出现错误时

多线程采集网页程序,线程开到2000多就出错了,求大神帮忙!

还有 有的时候下载出错。
出错会调用
// 出现错误时回调
virtual void DownloadFile_OnError (CString strFileURL);
我在该函数里面在调用DownloadFile 但是还是没有下载不知道为什么

以下源码更多说明: 
http://www.vckbase.com/index.php/wv/1406
下载:http://pan.baidu.com/share/link?shareid=625681381&uk=923551262

void DownloadFile (LPCTSTR strFileURL, int nPriority=THREAD_PRIORITY_IDLE)
    {
        if (!lstrlen(strFileURL))
            return;

        HANDLE   h = m_ThreadTab.Second_to_First(strFileURL, NULL) ;
        if (h)
        {
            if (::WaitForSingleObject(h,0) == WAIT_TIMEOUT) // downloading now
            {
                // ASSERT(FALSE);
                return ;
            }
            else
            {
                m_ThreadTab.RemoveElement (h, strFileURL) ; // remove
                ::CloseHandle (h) ;
            }
        }

        DWORD      _i ;
        PARA_DATA  * pPara = new PARA_DATA ;
        pPara->pThis = this ;
        pPara->strFileURL = strFileURL ;
        h = ::CreateThread (NULL, 0, __uis_DownloadFile, pPara, CREATE_SUSPENDED, &_i);
ASSERT(h);
        m_ThreadTab.AddElement (h, strFileURL);


        ::SetThreadPriority (h, nPriority) ;
        ::ResumeThread (h) ;
    }

采集蜘蛛
[解决办法]
引用:
那我要怎么控制线程数量呢,让他下载完成退出 在下载其他的


如果要频繁的创建线程的话,弄一个线程池吧,有任务来就丢个线程上去,执行完就立马回收!
超过的话,就排队等待吧!

热点排行