HANDLE CreateThread(//MSDN
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes
DWORD dwStackSize, // initial thread stack size
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
LPVOID lpParameter, // argument for new thread
DWORD dwCreationFlags, // creation flags
LPDWORD lpThreadId // pointer to receive thread ID
);
第一個(gè)參數是指向SECURITY_ATTRIBUTES型態(tài)的結構的指針。在Windows 98中忽略該參數。
在Windows NT中,它被設為NULL。第二個(gè)參數是用于新線(xiàn)程的初始堆棧大小,默認值為0。
在任何情況下,Windows根據需要動(dòng)態(tài)延長(cháng)堆棧的大小,所以為0即可。
CreateThread的第三個(gè)參數是指向線(xiàn)程函數的指標。函數名稱(chēng)沒(méi)有限制,但是必須以下列形式聲明:
DWORD WINAPI ThreadProc (PVOID pParam) ;
CreateThread的第四個(gè)參數為傳遞給ThreadProc的參數。這樣主線(xiàn)程和從屬線(xiàn)程就可以共享數據。CreateThread的第五個(gè)參數通常為0,但當建立的線(xiàn)程不馬上執行時(shí)為其賦予CREATE_SUSPENDED。線(xiàn)程將暫停直到呼叫ResumeThread來(lái)恢復線(xiàn)程的執行為止。
CreateThread的第六個(gè)參數是一個(gè)指標,指向接受執行者ID值的變量。1,線(xiàn)程和線(xiàn)程句柄(Handle)不是一個(gè)東西,線(xiàn)程是在cpu上運行的.....(說(shuō)不清楚了),線(xiàn)程句柄是一個(gè)內核對象。我們可以通過(guò)句柄來(lái)操作線(xiàn)程,但是線(xiàn)程的生命周期和線(xiàn)程句柄的生命周期不一樣的。線(xiàn)程的生命周期就是線(xiàn)程函數從開(kāi)始執行到return,線(xiàn)程句柄的生命周期是從CreateThread返回到你CloseHandle()。
2,所有的內核對象(包括線(xiàn)程Handle)都是系統資源,用了要還的,也就是說(shuō)用完后一定要closehandle關(guān)閉之,
如果不這么做,你系統的句柄資源很快就用光了。
3,如果你CreateThread以后需要對這個(gè)線(xiàn)程做一些操作,比如改變優(yōu)先級,被其他線(xiàn)程等待,
強制TermateThread等,就要保存這個(gè)句柄,使用完了在CloseHandle。如果你開(kāi)了一個(gè)線(xiàn)程,
而不需要對它進(jìn)行如何干預,CreateThread后直接CloseHandle就行了。所以CloseHandel(ThreadHandle );
只是關(guān)閉了一個(gè)線(xiàn)程句柄對象,表示我不再使用該句柄,即不對這個(gè)句柄對應的線(xiàn)程做任何干預了。
并沒(méi)有結束線(xiàn)程。如果你覺(jué)得多了一個(gè)變量,也可以寫(xiě)為:CloseHandel(CreateThread(NULL,0,.....));
聯(lián)系客服