線程中傳遞變量的問題
初次寫多線程編程的時候,初學者很容易犯的錯就是給線程傳遞變量的時候經常出錯,
因為線程中被傳遞的變量的類型不同,其效果也不一樣。經常采用的是分配新的內存給變
量,傳遞這個新分配的內存地址,因為同一個變量名,但是指向的內存段不同,這樣能實
現正確地給多線程傳遞變量,注意的是在每一個線程結束的時候一定要把這個分配的內存
釋放。
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;
}