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

钱再多 2013-09-11 09:18:58
源码如下,是在CSDN 下载的。出错的地方在26行

还有 有的时候下载出错。
出错会调用
// 出现错误时回调
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) ;
}
...全文
216 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
钱再多 2013-09-12
  • 打赏
  • 举报
回复
那我要怎么控制线程数量呢,让他下载完成退出 在下载其他的
钱再多 2013-09-12
  • 打赏
  • 举报
回复
运用线程下载 网页也不行吗?
引用 7 楼 lianshaohua 的回复:
[quote=引用 6 楼 max_min_ 的回复:] [quote=引用 5 楼 ruinyouhk 的回复:] 那我要怎么控制线程数量呢,让他下载完成退出 在下载其他的
如果要频繁的创建线程的话,弄一个线程池吧,有任务来就丢个线程上去,执行完就立马回收! 超过的话,就排队等待吧![/quote] 线程池会比较好,不过如果你2000多个线程在同时做事情,还是分多个程序比较好。[/quote]
max_min_ 2013-09-12
  • 打赏
  • 举报
回复
引用 7 楼 lianshaohua 的回复:
[quote=引用 6 楼 max_min_ 的回复:] [quote=引用 5 楼 ruinyouhk 的回复:] 那我要怎么控制线程数量呢,让他下载完成退出 在下载其他的
如果要频繁的创建线程的话,弄一个线程池吧,有任务来就丢个线程上去,执行完就立马回收! 超过的话,就排队等待吧![/quote] 线程池会比较好,不过如果你2000多个线程在同时做事情,还是分多个程序比较好。[/quote] 第一 2000条线程不可能同时做事情的! 第二 一个进程很难开到2000条的,除非除非你的硬件条件相当相当牛掰 建议楼主开线程池,最多也不要开超过100条(100都感觉太多了)的,太多线程很难处理同步异步问题的!
ztenv 版主 2013-09-12
  • 打赏
  • 举报
回复
引用 6 楼 max_min_ 的回复:
[quote=引用 5 楼 ruinyouhk 的回复:] 那我要怎么控制线程数量呢,让他下载完成退出 在下载其他的
如果要频繁的创建线程的话,弄一个线程池吧,有任务来就丢个线程上去,执行完就立马回收! 超过的话,就排队等待吧![/quote] 线程池会比较好,不过如果你2000多个线程在同时做事情,还是分多个程序比较好。
max_min_ 2013-09-12
  • 打赏
  • 举报
回复
引用 5 楼 ruinyouhk 的回复:
那我要怎么控制线程数量呢,让他下载完成退出 在下载其他的
如果要频繁的创建线程的话,弄一个线程池吧,有任务来就丢个线程上去,执行完就立马回收! 超过的话,就排队等待吧!
max_min_ 2013-09-11
  • 打赏
  • 举报
回复
一般的pc机上一般的pc机上跑200+的线程资源就用的差不多了 而且如果能够保证200 + 的线程能够正常运行起来工作已经很牛B啦! 你还2000 条。。。。
modyaj 2013-09-11
  • 打赏
  • 举报
回复
2000多 太多了吧 就算你是猪八戒 估计也得撑死 一般开个百把来就算不错的了
大尾巴猫 2013-09-11
  • 打赏
  • 举报
回复
2000多个线程
turing-complete 2013-09-11
  • 打赏
  • 举报
回复
开那么多线程干嘛 用“单线程非阻塞”吧

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧