部分代码:
void CLineDown::DownHtmMail(HWND hWnd ,char *sEnterUrl,int nLine,int nLevel)//初始化
{
m_nLine=nLine;
m_nLevel=nLevel;
m_hWnd=hWnd;
m_nNowLine=1;
....
AfxBeginThread((AFX_THREADPROC)ThrDownHtm,(LPVOID)&ctLine[nItem],NULL,0,NULL,NULL);
}void CLineDown::AllotThr()//分配线程
{
    CString sUrl;
    BOOL bJob=FALSE;
    LineMutex.Lock();
    m_nNowLine--;//线程减1
    int nLine=m_nNowLine;
    LineMutex.Unlock();

    for(int i=nLine; i<=m_nLine;i++)
    {
bJob=FALSE;
for(int j=1; j<=m_nLevel;j++)
{
    AUrlMutex.Lock();
    if(m_sUrl[m_nLevel-j].GetSize()>0)//检查是否有网址需要下载
    {
sUrl=m_sUrl[m_nLevel-j].GetAt(0);
m_sUrl[m_nLevel-j].RemoveAt(0,1);//删除一个网址
SendMessage(m_hWnd,MYWM_URL,0,(long )&sUrl);
LineMutex.Lock();
m_nNowLine++;//线程加1
LineMutex.Unlock();
int nItem=AddctLine(sUrl,m_nLevel-j+1);
AfxBeginThread((AFX_THREADPROC)LineDownHtm,(LPVOID)&ctLine[nItem],NULL,0,NULL,NULL);
bJob=TRUE;
break;
    }
    AUrlMutex.Unlock();
}
    if(bJob==FALSE)
break;
    }
}UINT CLineDown::ThrDownHtm(LPVOID pParam)
{
    //取得所需参数
    ctLineData *MyctLine=(ctLineData *)pParam;
    CString sUrl=MyctLine->sUrl;
    int nLevel=MyctLine->nLevel;
    CLineDown *MyClass=MyctLine->MyClass;
    MyClass->DelctLine(MyctLine->nItem);
    //取得网址
    char sUrlStr[1024],sSendStr[1024];
    int nPos=sUrl.Find(":",10);    wsprintf(sUrlStr,"%s",sUrl.Left(nPos));
    wsprintf(sSendStr,"%s",sUrl.Right(sUrl.GetLength()-nPos-1));
    char sHtmStr[102401];
    long nLen=102401,nNext;
    CGetHtm CHtmStr;//一个下载网页的类
    if(CHtmStr.GetHtmStr(sUrlStr,sSendStr,sHtmStr,&nLen))//下载网页返回内容
    {

if(nLevel<MyClass->m_nLevel)
{
    CAnalyUrl cUrl;//一个提取网址链接的类
    CString sHtm=sHtmStr;
    cUrl.ItinHtm(&sHtm,sUrlStr);
    CString sSubUrl;
    
    while(cUrl.GetNextUrl(&sSubUrl))//提取网址
    {
MyClass->AUrlMutex.Lock();
MyClass->m_sUrl[nLevel].Add(sSubUrl);
MyClass->AUrlMutex.Unlock();
    }
}
    }
    MyClass->AllotThr();
    return 0;
}

解决方案 »

  1.   

    For 里面不能循环开线程.用New或数组
      

  2.   

    看程序应该是没问题的,是不是在读取网页时产生了错误,
    看看是不是这样几种原因 1。线程太多,2 非法网页URL 3,下载网页时出现问题,就是下载网页的那个类不太健壮,处理能力不大好上面的代码没有内存泄漏一类的问题
      

  3.   

    我觉得是cpu资源不足的问题,时间片要等待分配,你可以在起用下一线程时停留SLEEP 几十毫秒钟,我做过多进程多线程的程序;
      

  4.   

    huqile可以试试
    但问题的出现是在线程到了最大限制以后一段时间才出现的
    即如果我最多可开30个线程
    程序开了30个线程后运行了一段时间才出问题
      

  5.   

    发给我瞧一下:
    [email protected]
      

  6.   

    AfxBeginThread里先设挂起的flags再用一个循环开始线程
      

  7.   

    源代码发过来,我帮你!
    [email protected]