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