WIN32多線程程式設計學習筆記(第二章) 《WIN32多線程程式設計》這本書也看了好多遍,但總是覺得印象不深;我想是不是應該做做筆記,一來可以加深一下印象。二也在可以在用時方便查閱。J 首先,我覺得線程一點都不難(這樣的心理暗示會使我覺得學的輕鬆一些);
why? 與
調用函數的過程類似;線程只不過用CreateThread的API將
函數
HANDLE hThread =
CreateThread (LPSECURITY_ATTRIBUTES lpThreadAtt, DWORD dwStackSize LPTHREAD_START_ROUTINE lpFun, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadID)LpFun:就是指向被封裝的函數的地址。LpParameter: 就是指向被封裝的函數的參數(沒有參數填入null)圖示: CreateThread()除了LpFun,LpParameter兩個參數極為重要外,它的其它的參數有啥用的?當然的有用了,具體使用的時候查協助就行了,實在不會,那就設為null得了。當調用CreateThread()後,會產生線程核心對象(如果已經產生了線程核心對象,那麼就只將此核心對象的引用計數加1;另外,win32系統中有若干種核心對象),並以控制代碼的方式代表它。那麼,顯然,線上程使用完畢後就應該用CloseHandle()函數關閉。 既然線程是獨立的啟動並執行程式,那麼主程式如何知道線程執行完畢呢?答案是通過GetExitCodeThread(HANDLE hThread,LPDWORD lpExitCode)函數。如果線程已結束,那麼線程結束的代碼被放在lpExitCode參數中帶回來,如果線程尚未結束,lpExitCode帶回來的值是STILL_ACTIVE。
值得注意的是:GetExitCodeThread(HANDLE hThread,LPDWORD lpExitCode)還可以帶回線程函數的傳回值。lpExitCode就是函數的傳回值
例: 線程函數:DWORD WINAPI ThreadFun(LPVOID n){ return 10;} int main(){hThrd = CreateThread(null,ThreadFun,…..);DWORD exitCode=0; for( ; ; ) { GetExitCodeThread(hThrd,&exitCode); If ( exitCode == STILL_ACTIVE) { //線程仍然在運行 } else { break; }}//exitCode儲存了函數的傳回值10printf(“線程函數的傳回值: %d /n”, exitCode);CloseHandle(hThrd);Return 0; } 這一章節的內容大概就是這麼多,總結一下:
*
產生一個線程 [ CreateThread() ]
*
判斷線程是否結束 [
GetExitCodeThread () ]
*
關閉線程 [
CloseHandle () ]
*
強制退出線程 [
ExitThread () ]
附註:以上本文純屬加強記憶所做筆記,內容或有不詳,甚至錯誤,請閱者見諒,匆見怪!!!
封裝起來,並
產生一個與主程式同時執行的程式來調用被封裝的函數。