BCB 中的多线程
最近在看 侯捷翻译的 《Win32多线程程序设计》,对于 _beginthreadex() 和 CreateThread()的使用里面提出:
如果主线程外的任何现成进行一下操作,就应该使用多线程版本的C runtime library,并使用_beginthreadex()和_endthreadex():
a、在C程序中使用malloc和free,在C++程序中使用new和delete
b、调用stdio.h和io.h中的任何函数
c、使用浮点变量或浮点运算函数
d、调用了任何一个使用了静态缓冲区的runtime函数
理由在《Win32多线程程序设计》中有详细的解答。换句话说,基本上我每个程序都符合上述条件,都必须使用_beginthreadex()。
而在《WINDOWS核心编程》中有下面这句话:
注意C r e a t e T h r e a d函数是用来创建线程的Wi n d o w s函数。不过,如果你正在编写C / C + +代码,决不应该调用C r e a t e T h r e a d。相反,应该使用Visual C++运行期库函数_ b e g i n t h r e a d e x。如果不使用M i c r o s o f t的Visual C++编译器,你的编译器供应商有它自己的C r e a t e T h r e d替代函数。不管这个替代函数是什么,你都必须使用。
_beginthreadex()我在BCB6.0中的帮助中也找得到啊。也可以使用……到底谁说错了啊……
注:我暂时不想使用 TThread
[解决办法]
这两段话一个意思,并不矛盾啊
在C++ Builder中,如果不用TThread,就应该用_beginthreadex
[解决办法]
C++ Builder中 很多人用C r e a t e T h r e a d
[解决办法]
_beginthreadex通过调用CreateThread来实现的, 但比CreateThread多做了许多工作. 所以, 建议用_beginthreadex来创建线程.
[解决办法]
bcb使用 BeginThread 更好一些。