作中我們經(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;
}
在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;
}