線程,是在進程內部又細分的一個執(zhí)行單元,他們都是由操作系統(tǒng)來進行劃分控制的。系統(tǒng)創(chuàng)建好進程后,實際上就啟動執(zhí)行了該進程的主執(zhí)行線程,主執(zhí)行線程以函數(shù)地址形式,比如說main或WinMain函數(shù),將程序的啟動點提供給Windows系統(tǒng)。主執(zhí)行線程終止了,進程也就隨之終止。每一個進程至少有一個主執(zhí)行線程,它無需由用戶去主動創(chuàng)建,是由系統(tǒng)自動創(chuàng)建的。用戶根據(jù)需要在應用程序中創(chuàng)建其它線程,多個線程并發(fā)地運行于同一個進程中。一個進程中的所有線程都在該進程的虛擬地址空間中,共同使用這些虛擬地址空間、全局變量和系統(tǒng)資源,所以線程間的通訊非常方便,多線程技術的應用也較為廣泛。 HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,
DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); 該函數(shù)在其調用進程的進程空間里創(chuàng)建一個新的線程,并返回已建線程的句柄,其中各參數(shù)說明如下:
DWORD SuspendThread(HANDLE hThread);
該函數(shù)用于掛起指定的線程,如果函數(shù)執(zhí)行成功,則線程的執(zhí)行被終止。
DWORD ResumeThread(HANDLE hThread);
該函數(shù)用于結束線程的掛起狀態(tài),執(zhí)行線程。
VOID ExitThread(DWORD dwExitCode);
該函數(shù)用于線程終結自身的執(zhí)行,主要在線程的執(zhí)行函數(shù)中被調用。其中參數(shù)dwExitCode用來設置線程的退出碼。 BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode);
一般情況下,線程運行結束之后,線程函數(shù)正常返回,但是應用程序可以調用TerminateThread強行終止某一線程的執(zhí)行。各參數(shù)含義如下: BOOL PostThreadMessage(DWORD idThread,
UINT Msg, WPARAM wParam, LPARAM lParam); 該函數(shù)將一條消息放入到指定線程的消息隊列中,并且不等到消息被該線程處理時便返回。 下面我給出一個簡單的建立線程的例子: #include "stdafx.h"
#include "windows.h" #include "stdio.h" void ThreadProcess() { for(int i=0; i<6; i++) { Sleep(1000); printf("Sub Thread Tick %d! \n",i*1000); } printf("Exit Sub Thread!\n"); } int _tmain(int argc, _TCHAR* argv[]) { HANDLE hThread; DWORD ThreadID; hThread=CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProcess, NULL, 0, &ThreadID); for(int i=0; i<10; i++) { Sleep(600); printf("Main Thread Tick %d! \n", i*600); } printf("Main Thread Loop Finished! \n"); system("pause"); return 0; } |
|