关于多线程的问题

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, &copy0, 0, NULL, &tid0);
   t_handle[1]=CreateThread(NULL, 0, &copy1, 0, NULL, &tid1);
   t_handle[2]=CreateThread(NULL, 0, &copy2, 0, NULL, &tid2);
   t_handle[3]=CreateThread(NULL, 0, &copy3, 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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值