调用一线程该线程又调用程序中一函数比如CXXDlg::Fun();
而这个Fun()函数里有一个大循环,循环里会再调用一函数,此函数是执行复制文件(自创)的现在有个问题,
我在这个大循环里有很多个MESSAGEBOX()判断,弹出的消息框点确定就continue,而就是因为我加了很多个消息框提示判断,程序就会出现错误我跟踪到它的错误是到了那个复制文件里的Write()我一直想不通它是为什么,并且,程序执行起来很慢,就是在那个循环里,我尝试将消息框判断的全部去掉,程序就没问题,并且执行起来很快,我就是想请问 一下,关于多线程下面弹出消息框确认的一般要怎么写才不会有错

解决方案 »

  1.   

    BOOL CXXXDlg::XXFileCopy(CString strLocalPath,CString strServerPath)
    {
    try
    {
    BYTE buffer[1024*64];
    CFile fileLocal(strLocalPath,CFile::modeRead);
    CFile fileServer(strServerPath,CFile::modeCreate|CFile::modeWrite);
    double dwRead=fileLocal.GetLength();
    double dwSize=dwRead;
    m_progress_file.SetRange(0,100);//设置进度条长度
    while (dwRead && CParameters::s_fCancelCopyFlag == D_CanCopy)
    {
    UINT nBytesRead=fileLocal.Read(buffer,sizeof(buffer));
    fileServer.Write(buffer,nBytesRead);
    dwRead-=nBytesRead;
    m_progress_file.SetPos(100*(dwSize-dwRead)/dwSize);//设置进度条进度
    }
    if (dwRead!=0 || CParameters::s_fCancelCopyFlag == D_CancelCopy)
    return FALSE;//1、用户取消复制  2、复制出错
    else
    return TRUE;//复制完成
    }
    catch (CException *e) {
    e->ReportError();
    return FALSE;
    }
    }程序会说什么未命名文件
      

  2.   

    有问题,
    在循环里调用MessageBox(),由于没有什么,那么很快就会产生很多消息对话框,资源严重不足,最后程序挂掉。你可以另创开个线程运行这个消息对话框,
    在初始线程里用WaitForSin.....()来等待这个线程的结束
      

  3.   

    czg516(同志努力) 说得不对,我用的是
    if (MessageBox(...) == IDOK)
    继续
    else
    退出这样在揗环里不会产生很多框,只是这样的MESSAGEBOX会令线程暂停,这样就会出错,我知道这样不好,可是有什么办法呢?高手请教教我
      

  4.   

    在线程中我用的是
    if (MessageBox(...) == IDOK)
    继续
    else
    退出这样会令线程暂停,这种方法我知道不好,可是有什么好的办法能在线程中遇到消息框与用户交互吗?请高手教教我!!!
      

  5.   

    不要使用系统的MessageBox自己创建一个消息处理框,用非模态对话框不就可以了。
      

  6.   

    能不能把你相关的代码贴出来,有MessageBox调用的。
      

  7.   

    楼主试用一下全局AfxMessageBox,
    应该能解决你的问题。
      

  8.   

    调试的话,为什么不用OutputDebugString呢?