windwos上創建多線程的方法

   每次一用到多線程就是到網上去找找資料,以爲當時記住了,就永遠記住了,其實幾天,幾星期或者幾個月後就會忘記的一乾二淨,所以想了下,還是記錄下吧。

   在windows上創建線程的方法有:

       1、CreateThread.

       2、_beginThread/_endThread, _beginThreadex/_endThreadex.

       3、AfxBeginThread/AfxEndThread

   在侯捷的《win32多線程程序設計》一書中這樣說到:
   如果在除主線程之外的任何線程中進行一下操作,你就應該使用多線程版本的C runtime library,並使用_beginthreadex和_endthreadex:
   1 使用malloc()和free(),或是new和delete
   2 使用stdio.h或io.h裏面聲明的任何函數
   3 使用浮點變量或浮點運算函數
   4 調用任何一個使用了靜態緩衝區的runtime函數,比如:asctime(),strtok()或rand()


下面也有個網上的說法,在這摘抄下,原文不知道是那的(感覺在本國都是天下文章千篇一律- -!):

   

1. Create/EndThread是Win32方法開始/結束一個線程
  _beginthreadx/_endthreadex是C RunTime方式開始/結束一個線程
  AfxBeginThread是在MFC中開始/結束一個線程


2.直接在CreateThread API創建的線程中使用sprintf,malloc,strcat等涉及CRT存儲堆操作的CRT庫函數是很危險的,容易造成線程的意外中止。 在使用_beginthread和_beginthreadex創建的線程中可以安全的使用CRT函數。但是必須在線程結束的時候相應的調用_endthread或_endthreadex


3._beginthread成對調用的_endthread函數內部隱式的調用CloseHandle關閉了線程句柄,而與_beginthreadex成對使用的_endthreadex則沒有關閉線程的句柄,需要顯示的調用CloseHandle關閉線程句柄,不要使用_beginthread,使用._beginthreadex代替之。


4.儘量不要在一個MFC程序中使用_beginthreadex()或CreateThread()。


5.沒有使用到MFC的線程儘量用_beginthreadex啓動。


6.如果在一個與LIBCMT.LIB鏈接的程序中調用C Runtime函數,則必須要用_beginthreadex啓動線程


7._beginthreadex啓動的線程可以安全的調用任何C Runtime 函數


本文只是做了下區別,使用方法還是到MSDN上一查就出來了,非常簡單,多謝查閱。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章