WEB开发网
开发学院软件开发VC CreateThread与_beginthread的区别 阅读

CreateThread与_beginthread的区别

 2008-12-06 19:59:27 来源:WEB开发网   
核心提示:在写c++代码时,一直牢记着一句话:决不应该调用CreateThread,CreateThread与_beginthread的区别,相反,应该使用Visual C++运行期库函数_beginthreadex, _beginthreadex和_beginthread函数的区别,_beginthread函数的参数比较少,好

在写c++代码时,一直牢记着一句话:决不应该调用CreateThread。相反,应该使用Visual  C++运行期库函数_beginthreadex。

好像CreateThread函数就是老虎,既然这样为什么微软要开发这个函数呢?

从网上找到的相关资料,现在汇总一下,在此对相关人员进行感谢!

摘自《windows  核心编程》:  

CreateThread函数是用来创建线程的Windows函数。不过,如果你正在编写C/C++代码,决不应该调用CreateThread。相反,应该使用Visual  C++运行期库函数_beginthreadex。如果不使用Microsoft的Visual  C++编译器,你的编译器供应商有它自己的CreateThred替代函数。  

若要使多线程C和C++程序能够正确地运行,必须创建一个数据结构,并将它与使用C/C++运行期库函数的每个线程关联起来。当你调用C/C++运行期库时,这些函数必须知道查看调用线程的数据块,这样就不会对别的线程产生不良影响。  

1.每个线程均获得由C/C++运行期库的堆栈分配的自己的tiddata内存结构。  

2.传递给_beginthreadex的线程函数的地址保存在tiddata内存块中。传递给该函数的参数也保存在该数据块中。  

3._beginthreadex确实从内部调用CreateThread,因为这是操作系统了解如何创建新线程的唯一方法。  

4.当调用CreatetThread时,它被告知通过调用_threadstartex而不是pfnStartAddr来启动执行新线程。   还有,传递给线程函数的参数是tiddata结构而不是pvParam的地址。  

5.如果一切顺利,就会像CreateThread那样返回线程句柄。如果任何操作失败了,便返回NULL。  

_beginthreadex和_beginthread函数的区别。_beginthread函数的参数比较少,因此比特性全面的_beginthreadex函数受到更大的限制。  

1 2  下一页

Tags:CreateThread beginthread 区别

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接