BOOL CMultiFTP::Get(CString szRemotepath, CString szLocalpath)
{
stThreadParam *pvar;
CString szCommand;
szCommand.Format("size %s",szRemotepath);
if(DoCommand(szCommand)!=FTP_SIZEOK)
return FALSE;
szMsg.Delete(0,4);
UINT uSize=atoi(szMsg),uAvgSize=uSize/nThreads,uStart=0;
nThreadOvered=0;
for(int i=1;i<=nThreads;i++)
{
pvar=new stThreadParam;
pvar->ID =i;
pvar->pFtp =this;
pvar->szLocalname.Format("%s_%d.dat",szLocalpath,i);
pvar->szRemotename =szRemotepath;
pvar->uStart =uStart;
pvar->uLength =(i==nThreads)?uSize:uAvgSize; uStart+=pvar->uLength ;
uSize-=uAvgSize;
AfxBeginThread(DownloadThread,pvar);
} szLocalname=szLocalpath;
return TRUE;}UNIT DownloadThread(LPVOID pVoid)
{
stThreadParam *pvar=(stThreadParam *)pVoid;
int ID=pvar->ID ,nPort=pvar->nPort;
CString szLocalname=pvar->szLocalname,szRemotename=pvar->szRemotename;
CString szHost=pvar->szHost ;
CString szUsername=pvar->szUsername ,szPassword=pvar->szPassword ;
UINT uStart=pvar->uStart ,uLength=pvar->uLength;
delete pvar;
CString szMsg;
CFile m_file;
char *pBuffer; m_file.Open(szLocalname,CFile::modeWrite|CFile::modeCreate);
pBuffer=(char *)VirtualAlloc(NULL,uLength,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);
ASSERT(pBuffer);
if(!pvar->pFtp->OpenFile /////////////出错(szRemotename,szLocalname,uStart,uLength))
{
m_file.Close();
DeleteFile(szLocalname);
VirtualFree(pBuffer,0,MEM_RELEASE);
return 0;
} for(UINT uRead;uLength;uLength-=uRead)
{
uRead=pvar->pFtp->Read(pBuffer,uLength);
m_file.Write(pBuffer,uRead);
}
m_file.Close();
VirtualFree(pBuffer,0,MEM_RELEASE);
gcs_multiftp.Lock();
pvar->pFtp->OnThreadOver(ID,0,"ok");
gcs_multiftp.Unlock();
return 0;
} OpenFile是类CMultiFTP的成员函数,每次执行到OpenFile就弹出对话框:unhandled exception in......什么问题,如何解决啊?
{
stThreadParam *pvar;
CString szCommand;
szCommand.Format("size %s",szRemotepath);
if(DoCommand(szCommand)!=FTP_SIZEOK)
return FALSE;
szMsg.Delete(0,4);
UINT uSize=atoi(szMsg),uAvgSize=uSize/nThreads,uStart=0;
nThreadOvered=0;
for(int i=1;i<=nThreads;i++)
{
pvar=new stThreadParam;
pvar->ID =i;
pvar->pFtp =this;
pvar->szLocalname.Format("%s_%d.dat",szLocalpath,i);
pvar->szRemotename =szRemotepath;
pvar->uStart =uStart;
pvar->uLength =(i==nThreads)?uSize:uAvgSize; uStart+=pvar->uLength ;
uSize-=uAvgSize;
AfxBeginThread(DownloadThread,pvar);
} szLocalname=szLocalpath;
return TRUE;}UNIT DownloadThread(LPVOID pVoid)
{
stThreadParam *pvar=(stThreadParam *)pVoid;
int ID=pvar->ID ,nPort=pvar->nPort;
CString szLocalname=pvar->szLocalname,szRemotename=pvar->szRemotename;
CString szHost=pvar->szHost ;
CString szUsername=pvar->szUsername ,szPassword=pvar->szPassword ;
UINT uStart=pvar->uStart ,uLength=pvar->uLength;
delete pvar;
CString szMsg;
CFile m_file;
char *pBuffer; m_file.Open(szLocalname,CFile::modeWrite|CFile::modeCreate);
pBuffer=(char *)VirtualAlloc(NULL,uLength,MEM_RESERVE|MEM_COMMIT,PAGE_READWRITE);
ASSERT(pBuffer);
if(!pvar->pFtp->OpenFile /////////////出错(szRemotename,szLocalname,uStart,uLength))
{
m_file.Close();
DeleteFile(szLocalname);
VirtualFree(pBuffer,0,MEM_RELEASE);
return 0;
} for(UINT uRead;uLength;uLength-=uRead)
{
uRead=pvar->pFtp->Read(pBuffer,uLength);
m_file.Write(pBuffer,uRead);
}
m_file.Close();
VirtualFree(pBuffer,0,MEM_RELEASE);
gcs_multiftp.Lock();
pvar->pFtp->OnThreadOver(ID,0,"ok");
gcs_multiftp.Unlock();
return 0;
} OpenFile是类CMultiFTP的成员函数,每次执行到OpenFile就弹出对话框:unhandled exception in......什么问题,如何解决啊?
DownloadThread函数里面:delete pvar;//错误调用OpenFile前已经把pvar delete了