根據《Win32多線程程式設計》中的介紹,當建立的子程式中包含某些C runtime 函數時,不應該使用
CreateThread()
。
如果主線程以外的任意建立的線程中包含以下操作,則應該使用多線程版本的C runtime library,并使用
_beginthreadex()
和
_endthreadex()
:
- 在C程式中使用
和malloc()
,或者在C++程式中使用free()
和new()
;delete()
- 調用
或stdio.h
中聲明的任何函數,包括io.h
、fopen()
、open()
、getchar()
、write()
等等。所有這些函數都用到共享的資料結構以及printf()
。對于格式化操作,如果不想使用C runtime library的函數,你可以使用errno
來替代wsprintf()
(wsprintf()是Win核心自己實作的,不依賴于C runtime library,其與printf()大同小異,唯一差別是在浮點數的處理上不同);printf()
- 使用浮點變量或者浮點運算函數;
- 調用任何一個使用了靜态緩沖區的runtime函數,如
、asctime()
或strtok
。rand()
如果建立的線程裡面沒有以上列出來的事項,則可以用單線程版本的runtime library和CreateThread()。
此外,如果要在MFC程式中産生一個線程,而該線程将調用MFC函數或使用MFC的任何資料,那麼必須使用
AfxBeginThread()
或
CWinThread::CreateThread()
來産生線程。