每次一用到多線程就是到網上去找找資料,以爲當時記住了,就永遠記住了,其實幾天,幾星期或者幾個月後就會忘記的一乾二淨,所以想了下,還是記錄下吧。
在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上一查就出來了,非常簡單,多謝查閱。