多线程采集网页程序,线程开到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) ;
}
[解决办法]
如果要频繁的创建线程的话,弄一个线程池吧,有任务来就丢个线程上去,执行完就立马回收!
超过的话,就排队等待吧!