线程中传递变量的问题
初次写多线程编程的时候,初学者很容易犯的错就是给线程传递变量的时候经常出错,
因为线程中被传递的变量的类型不同,其效果也不一样。经常采用的是分配新的内存给变
量,传递这个新分配的内存地址,因为同一个变量名,但是指向的内存段不同,这样能实
现正确地给多线程传递变量,注意的是在每一个线程结束的时候一定要把这个分配的内存
释放。
HANDLE mt[1000];
for(int i=0;i<50;i++)
{
pTI pti = new TI;
pti->pDlg = this;
pti->id = i;
pti->me = pti; //把自身的指针带过去
pClockThread[i] = AfxBeginThread(ClockThread,pti);
mt[i] = pClockThread[i]->m_hThread;
ResumeThread(pClockThread[i]->m_hThread);
}
DWORD dw = WaitForMultipleObjects(3,mt,TRUE,INFINITE);
UINT ClockThread( LPVOID pParam )
{
pTI pti;
pti =(pTI) pParam;
CClockDlg *pDlg = (CClockDlg *)pti->pDlg;
CString str;
str.Format("log%02d.txt",pti->id);
FILE *fp;
fp = fopen(str,"wb");
for(int m=0;m<100;m++)
{
CTime t = CTime::GetCurrentTime();
str.Format("id = %02d %02d:%02d.%02d",pti->id,t.GetHour(),t.GetMinute(),t.GetSecond());
fwrite(str+"\r\n",1,str.GetLength()+2,fp);
CDC *pDC = pti->pDlg->GetDC();
if(pDC)
{
pDC->TextOut(20,pti->id*16,str);
pDlg->ReleaseDC(pDC);
}
Sleep(100);
}
fclose(fp);
delete pti->me;//释放内存
AfxEndThread(0,TRUE);
return 0;
}