Win32中線程的創建和關閉


1、win32中線程的創建

  在win32中創建線程API函數

1 HANDLE CreateThread(
2   LPSECURITY_ATTRIBUTES lpsa, 
3   DWORD cbStack, 
4   LPTHREAD_START_ROUTINE lpStartAddr, 
5   LPVOID lpvThreadParam, 
6   DWORD fdwCreate, 
7   LPDWORD lpIDThread
8 ); 

  創建后一般關閉線程句柄,因為后期可能不在用到。關閉句柄不會影響線程的工作,這樣可以保證進程在退出時,減小引用計數,線程會釋放資源。

 

2、線程的關閉

[1] 退出線程函數的循環來退出線程;(盡量采用該方法)

[2] 進程中的一個線程調用ExitProcess;

[3] 另一個進程的線程中調用TerminalProcess;

 

3、線程同步

[1] 關鍵區域(Critical Sections)

  創建函數:InitializeCriticalSection

  刪除函數:DeleteCriticalSection

  進入函數:EnterCriticalSection

  離開函數:LeaveCriticalSection

提示:

(1)不要在一個Critical Section中調用sleep或者任何wait函數;

(2)出現兩個Critical Section時避免死鎖;

[2] 事件(Event)

  創建函數:CreateEvent

  刪除函數:CloseHandle

  進入函數:SetEvent

  離開函數:ResetEvent

[3] 互斥量(Mutex)

  創建函數:CreateMutex

  刪除函數:CloseHandle

  進入函數:WriteForSingleObject、WaitForMultiObject

  離開函數:ReleaseMutex

提示:

(1)CloseHandle並不是實際的關閉互斥量,Mutex是一個核心對象,CloseHandle只是將引用計數減一,如果進程退出時,引用計數降為零,系統就是釋放核心的資源。

[4] 信號量(Semaphores)

 

線程同步中的注意點:

[1] 只有Critical Sections不是核心對象;

[2] 互斥量ReleaseMutex后立即變為激活狀態;

[3] Event可以完全在程序的操控之下;

 

 

void InitializeCriticalSection( 
  LPCRITICAL_SECTION lpCriticalSection 
); 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM