-1
HANDLE threadHandle = CreateThread(?, ?, ?, .......);
SetThreadPriority(threadHandle, priority);
CloseHandle(threadHandle);
threadHandle = NULL;
............
HANDLE threadHandle = CreateThread(?, ?, ?, .......);
SetThreadPriority(threadHandle, priority);
CloseHandle(threadHandle);
threadHandle = NULL;
............
不,這不是要求 - 只是一個潛在的調試幫助。
從你的角度來看,一個句柄通常只是一個整數(OK,有時候它是一個指針,但指針也是一個整數......),它通常只對提供句柄的API有意義即使是關閉API,它也是一個有意義的數字。通常這是一個很好的做法,它可以幫助調試,並且還可以減少一些相關的運行時錯誤(雙重關閉重用句柄)。 – pasztorpisti
我添加的第二個用法如何?該用法是否有效?因爲closehandle不會終止線程。如果是的話,我該如何處理將線程句柄設置爲空? – ssn
第二個用法是無效的,因爲在關閉句柄後,句柄的值對API沒有意義。在最糟糕的情況下,API已經重用先前關閉的句柄值,然後您的SetThreadPriority()調用會更改不屬於您的句柄的優先級。當然,大多數API在重用句柄值時會使用一些時間延遲,但有些API不會,例如在使用opengl的情況下,您可以輕鬆地解決關閉重用句柄的問題,然後您會看到呈現在渲染場景中的奇怪紋理/圖像... – pasztorpisti