C技巧:VC中創(chuàng)建多個線程的方法

字號:

作中我們經(jīng)常會遇到要建立多個線程,以此方便于我們可以同時執(zhí)行多個事件。考試大也是在VC開發(fā)中的一項(xiàng)基礎(chǔ),雖然曾多次用到,但也會常常忘記。
    在VC中,無非是創(chuàng)建線程和寫線程函數(shù)
    1, 創(chuàng)建線程:
    #include
    在MFC中通常在OnInitDialog()下面創(chuàng)建線程
    //定義參數(shù):SerialControl
    //------------------變量函數(shù)初始化調(diào)用區(qū)域--------
    CSerialControl * m_SerialControl=new CSerialControl();
    m_SerialControl->Create(NULL,\"aa\",WS_CHILD,CRect(0,0,0,0),this,2,NULL);
    m_SerialControl->InitAllSerialPort();
    //------------------------------------------------
    HANDLE hThread1=CreateThread(NULL,0,DetectCar,(LPVOID)SerialControl,0,NULL);
    CloseHandle(hThread1);//此處關(guān)閉線程的句柄,但不意味關(guān)閉線程,線程在程序退出時關(guān)閉
    參數(shù)說明:
    HANDLE CreateThread(
    LPSECURITY_ATTRIBUTES lpThreadAttributes,//必須為NULL
    DWORD dwStackSize, //一般為0 ,表示堆棧與外部大小相同
    LPTHREAD_START_ROUTINE lpStartAddress, //線程函數(shù)名稱
    LPVOID lpParameter, //傳遞給線程函數(shù)的參數(shù),如果為多個,自定義結(jié)構(gòu)體
    DWORD dwCreationFlags, //0表示創(chuàng)建線程后立即啟動線程,如果不是立即啟動需要調(diào)用ResumeThread函數(shù)
    LPDWORD lpThreadId);//用來標(biāo)記該線程的名稱
    2, 定義線程函數(shù):
    //函數(shù)的定義
    static DWORD WINAPI DetectCar(LPVOID lpParameter); //一般用靜態(tài)函數(shù)
    //remark:由于線程函數(shù)是靜態(tài)函數(shù),如果要在函數(shù)中用到對象,必須通過
    //函數(shù)的實(shí)現(xiàn)
    /***************************************************
    *作者:萬田
    *時間:2007-13-03
    *函數(shù):DetectCar() 說明:檢測線程
    ****************************************************/
    DWORD WINAPI CISSDlg::DetectCar(LPVOID lpParameter)
    {
     TRACE(\"Thread DetectCar is running\\r\\n\");
     CSerialControl* SControl=(CSerialControl*)lpParameter;
     //define:record which road is car
     int Carexit=0;
     while (TRUE)//do this forever
     {
     //get:which road exit car
     Carexit=SControl->m_GroudDetector1.CarExists();
     ***********
     }
     return true;
    }