1CM

  

线程中传递变量的问题

线程中传递变量的问题
    初次写多线程编程的时候,初学者很容易犯的错就是给线程传递变量的时候经常出错,
因为线程中被传递的变量的类型不同,其效果也不一样。经常采用的是分配新的内存给变
量,传递这个新分配的内存地址,因为同一个变量名,但是指向的内存段不同,这样能实
现正确地给多线程传递变量,注意的是在每一个线程结束的时候一定要把这个分配的内存
释放。
    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;
}

posted on 2007-05-31 18:07 1CM 阅读(237) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理