CFtpDownload::CFtpDownload(CDownloadDlg * CDownload,CStringArray * t_Csa, DWORD ctout)
{
    
    CWinThread * dl_thread = AfxBeginThread(::DownLoadFunction, this);//Start downloading thread
while (thread_finished_flag == FALSE);
result_str = "下载文件结束";}
UINT DownLoadFunction(LPVOID lParam)
{
CFtpDownload * pFtpI = (CFtpDownload *)lParam
         pFtpI->thread_finished_flag = TRUE;//Let the main thread know we finished
return 0
}

解决方案 »

  1.   

    用WaitForSingleObject(dl_thread->m_hThread, INFINITE);替换while循环
      

  2.   

    改成下面试试
    while (thread_finished_flag == FALSE) Delay(10);
      

  3.   

    写错了!
    while (thread_finished_flag == FALSE) Sleep(10);
      

  4.   

    同意flyelf(空谷清音)的。
    用WaitForSingleObject(dl_thread->m_hThread, INFINITE);替换while循环
      

  5.   

    楼上的都可以
    还可以用CreateEvent和SetEvent
      

  6.   

    你这样做在debug 版 应该可以但是在 release 版是不行的thread_finished_flag 是不会被工作Thread 设置因此 可能死循环使用WaitForSingleObject(dl_thread->m_hThread, INFINITE) 就可以了
      

  7.   

    怪了,我用WaitForSingleObject(dl_thread->m_hThread, INFINITE)也死机
    我在线程里又设置了主界面窗口的显示内容,CFTPDownLoadFiles::CFTPDownLoadFiles(CFtpDownload * t_pFtpI)
    {
    pFtpI = t_pFtpI;
    wsprintf(status_str, "正在连接服务器 %s", pFtpI->Csa->GetAt(0));
    pFtpI->CDownDlg1->SetStatus(status_str);//执行该句死机
    }
      

  8.   

    CDownDlg1 是主界面窗口,我只是单纯的窗口应用
      

  9.   

    while (thread_finished_flag == FALSE);这样会死掉的这样就可以:
    while (thread_finished_flag == FALSE) Sleep(100);
      

  10.   

    DWORD dwRet = WaitForSingleObject(dl_thread->m_hThread, 100);看看返回值,我觉得其他地方还可能存在问题
      

  11.   

    volatile  BOOL thread_finished_flag;
      

  12.   

    启动的线程处于有信号状态,发现是停在
    CFTPDownLoadFiles::CFTPDownLoadFiles(CFtpDownload * t_pFtpI)
    {
    pFtpI = t_pFtpI;
    wsprintf(status_str, "正在连接服务器 %s", pFtpI->Csa->GetAt(0));
    pFtpI->CDownDlg1->SetStatus(status_str);//执行该句死机
    }如果不线程同步的话,不会死机
    哪位兄弟有时间我把源码发过去,帮我调试一下,我把这个帖子结一下,另开