15,979
社区成员
发帖
与我相关
我的任务
分享
UINT CDiskSpeedDlg::ZWrite(LPVOID lpParam)
{
CString mv;
clock_t end;
clock_t start;
int count;
//m_write.GetWindowTextW(write);
CString str;
write->GetWindowText(str);
int e=_ttoi(str);
count=e;
CString ctd;
piece->GetWindowText(ctd);
int region= _ttoi(ctd);
CString filePath;
CString driveName;
//***************************************
conClean->GetWindowTextW(driveName);
CString fileName=_T("T2.dat");
filePath.Format ( _T("%s\\%s"),driveName,fileName);
//MessageBox(filePath);
TCHAR hh[512];
memset(hh, 0, sizeof(hh));
lstrcpy(hh,filePath);
HANDLE hFile = CreateFile(hh,
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_FLAG_WRITE_THROUGH|FILE_FLAG_NO_BUFFERING|FILE_FLAG_OVERLAPPED,NULL);
//***************************************
//检查错误码
//LPVOID lpMsgBuf;
//FormatMessage(
// FORMAT_MESSAGE_ALLOCATE_BUFFER |
// FORMAT_MESSAGE_FROM_SYSTEM |
// FORMAT_MESSAGE_IGNORE_INSERTS,
// NULL,
// GetLastError(),
// MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
// (LPTSTR) &lpMsgBuf,
// 0,
// NULL
// );
//MessageBox( (LPCTSTR)lpMsgBuf);
//LocalFree( lpMsgBuf );
//********************************
/*if(hFile == INVALID_HANDLE_VALUE)
{
MessageBox(_T("文件创建失败"));
}*/
//起始时间
//OnBnClickedRadio2();
//if(m_cache.GetCheck()==TRUE)//判断radio button是否被选中
CString qqq;
ttime->GetWindowText(qqq);
int m= _ttoi(qqq);
start = clock();
for(int i=0;i<count*1024/Block_size;i++)
{
WOffset = WOffset + MB_SIZE*Block_size;
overlap.Offset = WOffset & 0xffffffff ;
overlap.OffsetHigh = (WOffset>>32) & 0xffffffff;
BOOL rc = WriteFile(hFile,buf,region*1024*1024,&dwBytesWrite,&overlap);
/*if(rc == 0)
{
MessageBox(_T("WriteFile写文件失败"));*/
if (GetLastError() == ERROR_IO_PENDING)
{//当错误是ERROR_IO_PENDING,那意味着写文件的操作还在进行中
//等候,直到文件写完
//一直阻塞等到得到数据才继续下面。
//WaitForSingleObject(hFile, INFINITE);
//rc = GetOverlappedResult(hFile,&overlap,&dwBytesWrite,FALSE);
GetOverlappedResult(hFile,&overlap,&dwBytesWrite,TRUE);
}
else
{
break;
}
end = clock(); //结束时间
int d_time=(end-start)/1000; //获取时间差
tiime.Format(_T("%d"),d_time);
TTime->SetWindowTextW(tiime);
t =count*1024*MB_SIZE; //写入字节数
t = t/1024;
m=t/((end-start)-100); //瞬时速度
if((end-start)!=0)
t = t/(end-start); //平均速度
speed = t;
v.Format(_T("%d"),speed);
average_velocity->SetWindowTextW(v);
moment=m;
mv.Format(_T("%d"),moment);
moment_time->SetWindowTextW(mv);
//*******************************************************************
CProgressCtrl *Speed = (CProgressCtrl*)lpParam;
if((CProgressCtrl*)lpParam!=NULL)
{
if(Speed->GetPos()==nUpper)//判断当前光标是否等于最大值
{
Speed->SetPos(nLower);//设定初始位置
}
//用每一步的增量来增加进度条的当前位置
if(i%r==0)
{
Speed->StepIt();
}
}
if(qqq.Compare(tiime)==0)
{
break;
}
}
CloseHandle(hFile);
return 0;
}
问题在 CProgressCtrl *Speed = (CProgressCtrl*)lpParam;