void CCopyDlg::OnButton2()
{
// TODO: Add your control notification handler code here
struct myPra pra;
CFile sourceFile;
CFile destFile;
UINT len1,len2;
CString m_strSourse = "f://test0.mkv";
CString m_strDest="e://test.mkv";
len1 = m_strDest.GetLength();
len2 = m_strSourse.GetLength();
pra.pDest = new char[len1+1];
pra.pSourse = new char[len2+1];
BYTE buffer[4096];
DWORD dwRead=0;
int iLoop, iSmall,iBig;
HANDLE t_handle[4];
lstrcpyn(pra.pDest,m_strDest,len1+1);
lstrcpyn(pra.pSourse,m_strSourse,len2+1);
//打开源文件
if(sourceFile.Open(m_strSourse, CFile::modeRead))
{
// AfxMessageBox("success!!!");
}
//得到源文件的字节数
DWORD sz=GetFileSize((void*)sourceFile.m_hFile,NULL);
//为每个线程分配任务
DWORD amount = sz/4;
pra.count=amount;
unsigned long tid0=0;
unsigned long tid1=0;
unsigned long tid2=0;
unsigned long tid3=0;
DWORD t0,t1,t;
t0 = GetTickCount();
t_handle[0]=CreateThread(NULL, 0, ©0, 0, NULL, &tid0);
t_handle[1]=CreateThread(NULL, 0, ©1, 0, NULL, &tid1);
t_handle[2]=CreateThread(NULL, 0, ©2, 0, NULL, &tid2);
t_handle[3]=CreateThread(NULL, 0, ©3, 0, NULL, &tid3);
if (yyy0==1 && yyy1==1 && yyy2==1 &&yyy3==1)
{
t1 = GetTickCount();
t=(t1-t0);
CString str,str1;
str.Format("%d",t);
str1=CString("用时为:")+str+CString("毫秒");
AfxMessageBox(str1);
}
// WaitForMultipleObjects(4,t_handle,TRUE,INFINITE);
/*
t1 = GetTickCount();
t=(t1-t0);
CString str,str1;
str.Format("%d",t);
str1=CString("用时为:")+str+CString("毫秒");
AfxMessageBox(str1);*/
}
unsigned long __stdcall copy0(void* pthePra)
{
CFile sourceFile,destFile;
char* pFileName = "f://test0.mkv";
// struct myPra* pStrPra = (myPra*)pthePra;
// sourceFile.Open(pStrPra->pSourse, CFile::modeRead);
sourceFile.Open(pFileName, CFile::modeRead);
DWORD sz=GetFileSize((void*)sourceFile.m_hFile,NULL);
DWORD amount = sz/4;
char* dstName="e://test0.mkv";
DWORD count0=amount;
int flag=0;
//打开目的文件
destFile.Open(dstName,CFile::modeWrite| CFile::shareExclusive | CFile::modeCreate);
// AfxMessageBox("success!!!00000000000");
sourceFile.Seek(0,CFile::begin);
DWORD dwRead=0;
BYTE buffer[4096];
DWORD sumread=0;
do
{
dwRead = sourceFile.Read(buffer, 4096);
sumread+=dwRead;
destFile.Write(buffer, dwRead);
}
while (sumread <=count0);
yyy0=1;
return 0;
}
unsigned long __stdcall copy1(void* pthePra)
{
CFile sourceFile,destFile;
char* pFileName = "d://test.mkv";
struct myPra* pStrPra = (myPra*)pthePra;
sourceFile.Open(pFileName, CFile::modeRead);
DWORD sz=GetFileSize((void*)sourceFile.m_hFile,NULL);
DWORD amount = sz/4;
char* dstName="e://test1.mkv";
DWORD count1=amount;
int flage=0;
//打开目的文件
destFile.Open(dstName,CFile::modeWrite| CFile::shareExclusive | CFile::modeCreate);
sourceFile.Seek(0,CFile::begin);
BYTE buffer[4096];
DWORD dwRead=0;
DWORD sumread=0;
do
{
dwRead = sourceFile.Read(buffer, 4096);
sumread+=dwRead;
destFile.Write(buffer, dwRead);
}
while (sumread <=count1);
yyy1=1;
return 0;
}
unsigned long __stdcall copy2(void* pthePra)
{
CFile sourceFile,destFile;
char* pFileName = "d://test2.mkv";
sourceFile.Open(pFileName, CFile::modeRead);
DWORD sz=GetFileSize((void*)sourceFile.m_hFile,NULL);
DWORD amount = sz/4;
char* dstName="e://test2.mkv";
DWORD count1=amount;
int flage=0;
//打开目的文件
destFile.Open(dstName,CFile::modeWrite| CFile::shareExclusive | CFile::modeCreate);
sourceFile.Seek(0,CFile::begin);
BYTE buffer[4096];
DWORD dwRead=0;
DWORD sumread=0;
do
{
dwRead = sourceFile.Read(buffer, 4096);
sumread+=dwRead;
destFile.Write(buffer, dwRead);
}
while (sumread <=count1);
yyy2=0;
return 0;
}
unsigned long __stdcall copy3(void* pthePra)
{
CFile sourceFile,destFile;
char* pFileName = "f://test3.mkv";
sourceFile.Open(pFileName, CFile::modeRead);
DWORD sz=GetFileSize((void*)sourceFile.m_hFile,NULL);
DWORD amount = sz/4;
char* dstName="e://test3.mkv";
DWORD count1=amount;
int flage=0;
//打开目的文件
destFile.Open(dstName,CFile::modeWrite| CFile::shareExclusive | CFile::modeCreate);
sourceFile.Seek(0,CFile::begin);
BYTE buffer[4096];
DWORD dwRead=0;
DWORD sumread=0;
do
{
dwRead = sourceFile.Read(buffer, 4096);
sumread+=dwRead;
destFile.Write(buffer, dwRead);
}
while (sumread <=count1);
yyy3=0;
return 0;
}