一、
1、定義入口函數
static void threadFunc(void);//在TestDlg.h里面聲明
void CTestDlg::threadFunc(void) //在TestDlg.cpp里定義
{
Sleep(1000);
AfxMessageBox(_T("OK!"));
}
2、定義線程句柄:
HANDLE hthread; //線程句柄
3、獲取線程句柄:
函數原型:
static HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpsa,//訪問級別
DWORD dwStackSize, //棧大小
LPTHREAD_START_ROUTINE pfnThreadProc,//線程函數
void* pvParam, //函數傳遞參數
DWORD dwCreationFlags, //啟動方式
DWORD* pdwThreadId //返回ID
) throw( );
hthread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)threadFunc,NULL,0,NULL);//獲得句柄
4、關閉句柄
CloseHandle(hthread);//並不會關閉線程
二、一些函數
1、DWORD SuspendThread(HANDLE hThread); 該函數用於掛起指定的線程,如果函數執行成功,則線程的執行被終止。
2、 DWORD ResumeThread(HANDLE hThread); 該函數用於結束線程的掛起狀態,執行線程。
3、VOID ExitThread(DWORD dwExitCode); 該函數用於線程終結自身的執行,主要在線程的執行函數中被調用。其中參數dwExitCode用來設置線程的退出碼。 4、 BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode); 一般情況下,線程運行結束之后,線程函數正常返回,但是應用程序可以調用TerminateThread強行終止某一線程的執行。各參數含義如下:hThread:將被終結的線程的句柄;dwExitCode:用於指定線程的退出碼。
使用 TerminateThread()終止某個線程的執行是不安全的,可能會引起系統不穩定;雖然該函數立即終止線程的執行,但並不釋放線程所占用的資源。因此,一般不建議使用該函數。
5、BOOL PostThreadMessage(DWORD idThread,UINT Msg, WPARAM wParam, LPARAM lParam);
該函數將一條消息放入到指定線程的消息隊列中,並且不等到消息被該線程處理時便返回。
idThread:將接收消息的線程的ID;
Msg:指定用來發送的消息;
wParam:同消息有關的字參數;
lParam:同消息有關的長參數;
調用該函數時,如果即將接收消息的線程沒有創建消息循環,則該函數執行失敗。
二、多線程同步
1、CreateMutex(互斥對象)
2、WaitFirSingleObject
3、ReleaseMutex