採用CreateThread創建多線程程序
在window環境下,Win32 提供了一系列的API函數來完成線程的創建、掛起、恢復、終結以及通信等工作:
1、主要的函數列表:
序號 |
函數名 |
功能 |
1 |
CreateThread() |
創建一個新線程 |
2 |
ExitThread() |
正常結束一個線程的執行 |
3 |
TerminateThead() |
強制終止一個線程的執行 |
4 |
ResumeThread() |
重啓一個線程 |
5 |
SuspendThread() |
掛起一個線程 |
6 |
GetExiCodeThread() |
得到一個線程的退出碼 |
7 |
GetThreadPriority() |
得到一個線程的優先級 |
8 |
SetThreadPriority() |
設置一個線程的優先級 |
9 |
CloseHandle() |
關閉一個線程的句柄 |
10 |
CreateRemoteThread() |
再另一個進程中創建一個新線程 |
11 |
PostThreadMessage() |
發送一條消息給指定的線程 |
12 |
GetCurrentThread() |
得到當前的線程句柄 |
13 |
GetCurrentThreadId() |
得到當前線程的ID |
14 |
GetThreadId() |
得到指定線程的ID |
15 |
WaitForSingleObject() |
等待單個對象 |
16 |
WaitForMultipleObjects() |
等待多個對象 |
2、CreateThread函數原型:
HANDLE WINAPI CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes, //線程安全相關的屬性,常置爲NULL
SIZE_T dwStackSize, //新線程的初始化棧在大小,可設置爲0
LPTHREAD_START_ROUTINE lpStartAddress, //被線程執行的回調函數,也稱爲線程函數
LPVOID lpParameter, //傳入線程函數的參數,不需傳遞參數時爲NULL
DWORD dwCreationFlags, //控制線程創建的標誌
LPDWORD lpThreadId //傳出參數,用於獲得線程ID,如果爲NULL則不返回線程ID
);
3、線程函數的定義:
線程函數的規範格式定義爲
DWORD WINAPI ThreadProc (LPVOID lpParam);//格式不正確將無法調用成功。函數名稱沒有限制,只要符合命名規則就可以。
簡單例子:
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
int tipMsg = (int)lpParameter;
CString strMsg;
strMsg.Format(L"%d", tipMsg);
AfxMessageBox(strMsg);
return 0;
}
void CThreadTestOneDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知處理程序代碼
DWORD dwThreadID = 0;
HANDLE hThread = CreateThread(NULL,0, ThreadProc,(LPVOID)123,0,&dwThreadID);
CloseHandle(hThread);
}