CreateThread和_beginthread的区别
来源:互联网 发布:我们相遇网络歌词 编辑:程序博客网 时间:2024/05/20 02:26
转自:冷秋魂的专栏
http://blog.csdn.net/primer_programer/archive/2007/12/26/1968158.aspx
There are two ways to create threads. One method involves using the CRT _beginthread() or _beginthreadex() (with Visual C++ 2.0 and later); the other method involves using the CreateThread() API. All CRT functions other than the signal() function work correctly in threads created with either _beginthread() or CreateThread(). However, there are some problems involved with using CRT functions in threads created with CreateThread().
Threads that are created and terminated with the CreateThread() and ExitThread() Win32 API functions do not have memory that is allocated by the CRT for static data and static buffers cleaned up when the thread terminates. Some examples of this type of memory are static data for errno and _doserrno and the static buffers used by functions such as asctime(), ctime(), localtime(), gmtime(), and mktime(). Using CreateThread() in a program that uses the CRT (for example, links with LIBCMT.LIB) may cause a memory leak of about 70-80 bytes each time a thread is terminated.
To guarantee that all static data and static buffers allocated by the CRT are cleaned up when the thread terminates, _beginthreadex() and _endthreadex() should be used when creating a thread. The _beginthreadex() function includes the same parameters and functionality as CreateThread().
http://blog.csdn.net/primer_programer/archive/2007/12/26/1968158.aspx
CreateThread 是一个Win 32API 函数,_beginthread 是一个CRT(C Run-Time)函数,他们都是实现多线城的创建的函数,而且他们拥有相同的使用方法,相同的参数列表。
但是他们有什么区别呢?
一 般来说,从使用角度是没有多大的区别的,CRT函数中除了signal()函数不能在CreateThread创建的线城中使用外,其他的CRT 函数都可一正常使用,但是如果在CreateThread创建的线城中使用CRT函数的话,会产生一些Memory Leak.
下面是摘自KB的原话:
SUMMARY
All C Run-time functions except the signal() function work correctly when used in threads created by the CreateThread() function. However, depending on what CRT functions are called, there may be a small memory leak when threads are terminated. Calling strlen(), for example, does not trigger the allocation of the CRT thread data-block, and calling malloc(), fopen(), _open(), strtok(), ctime(), or localtime() causes allocation of a CRT per-thread data-block, which may cause a memory leak.MORE INFORMATION
The "Programming Techniques" manual supplied with Visual C++ 32-bit Edition states that using CreateThread() in a program that uses Libcmt.lib causes many CRT functions to fail. Actually, the only function that should not be used in a thread created with CreateThread() is the signal() function.There are two ways to create threads. One method involves using the CRT _beginthread() or _beginthreadex() (with Visual C++ 2.0 and later); the other method involves using the CreateThread() API. All CRT functions other than the signal() function work correctly in threads created with either _beginthread() or CreateThread(). However, there are some problems involved with using CRT functions in threads created with CreateThread().
Threads that are created and terminated with the CreateThread() and ExitThread() Win32 API functions do not have memory that is allocated by the CRT for static data and static buffers cleaned up when the thread terminates. Some examples of this type of memory are static data for errno and _doserrno and the static buffers used by functions such as asctime(), ctime(), localtime(), gmtime(), and mktime(). Using CreateThread() in a program that uses the CRT (for example, links with LIBCMT.LIB) may cause a memory leak of about 70-80 bytes each time a thread is terminated.
To guarantee that all static data and static buffers allocated by the CRT are cleaned up when the thread terminates, _beginthreadex() and _endthreadex() should be used when creating a thread. The _beginthreadex() function includes the same parameters and functionality as CreateThread().
- CreateThread和_beginthread的区别
- CreateThread和_beginthread的区别
- CreateThread和_beginthread的区别
- CreateThread和_beginthread的区别
- _beginthread 和 CreateThread 区别
- _beginthread 和 CreateThread 区别
- CreateThread 、Afxbeginthread 和 _beginThread 的区别
- CreateThread和_beginthread的区别及使用
- 关于_beginthreadex、_beginthread和CreateThread的区别
- CreateThread、_beginthread和_beginthreadex区别
- CreateThread,_beginthread,_beginthreadx的区别
- CreateThread与_beginthread的区别
- CreateThread与_beginthread的区别
- CreateThread与_beginthread的区别
- CreateThread,_beginthread,_beginthreadx的区别
- CreateThread,_beginthread,_beginthreadx的区别
- CreateThread与_beginthread的区别
- CreateThread,_beginthread,_beginthreadx的区别
- 推荐几个Java开发者应该多去的技术网站
- linq学习笔记(一)
- [编译记录]关于编译器错误C2885...
- 二月西班牙亮相 GARMIN推出首款3G touch screen GPS手机
- 世界编程语言排行榜08年01月_VB 语言
- CreateThread和_beginthread的区别
- const用法小结(转)
- 世界编程语言排行榜08年01月_PHP 语言
- 关于项目管理的知识点
- 定义类
- 最初级的堆栈溢出分析问题
- TestCompelte与QTP在Web测试方面的比较
- 电脑系统常见进程-进程管理
- 类的成员概述