_beginthread http://www.cnblogs.com/whiteyun/archive/2011/06/02/2067742.html
来源:互联网 发布:c语言杨辉三角解析 编辑:程序博客网 时间:2024/05/16 11:27
在微软的 Programming Techniques 说明文件中有一句看似悲惨的警告:
警告:如果你在一个与 LIBCMT.LIB 链接的程序中调用 C runtime 函数, 你的线程就必须以 _beginthread() 启动之。不要使用 Win32 的ExitThread() 和 CreateThread()。
首先看一下_beginthreadex:
1、如果你写一个多线程程序,而且没有使用MFC,那么你应该总是和多线程版本的C Run time library进行链接。并且应该总是以_beginthreadex和_endthreadex取代createthread和exitthread。_beginthread参数与createthread一致并且对C Runtime library进行了必要的初始化。
2、关于C Runtime library的多线程版本:之前的版本不能被多线程的应用程序所使用。由于它使用了很多全局变量以及静态变量,所以在多线程应用程序中很容易产生同步错误。因为这个原因,所以产生了C Runtime library的多线程版本。
3、你可以将_beginthreadex理解为createthread的外包函数,它记录了一些和启动线程相关的信息。
4、unsigned long _beginthreadex(
void *security, //安全属性
unsigned stack_size, //堆栈大小
unsigned (__stdcall *start_address)(void *), //回调函数
void *arglist,unsigned initflag, //创建标志
unsigned* thrdaddr //线程ID
);
一个简单的例子:
#include <iostream>
#include <cstdlib>
using namespace std;
#include <Windows.h>
#include <process.h>
unsigned _stdcall ThreadProc(void* param);
int main()
{
}
unsigned _stdcall ThreadProc(void* param)
{
}
如果一个多线程程序在worker线程中不会调用c runtime library多线程版本中函数的话,应该能够使用单线程版本的c runtime library并且可以通过createthread和exitthread来创建和结束线程。然而C程序不调用任何多线程版本的c runtime函数通常是不可能的,所以记住这一点:如果要产生一个多线程的C程序(不使用MFC),那么请一定使用_beginthreadex和_endthreadex,而不要使用createthread和_beginthread。
关于_beginthread:它被认为是一个头脑简单的函数,它并没有获得和createthread函数完全一样的参数,所以有些事情它办不到,比如说线程的挂起状态。另外重要的一点是,它所产生出来的线程所做的第一件事情就是关闭掉handle,所以由它所返回的handle可能可用,也可能不可用。
- _beginthread http://www.cnblogs.com/whiteyun/archive/2011/06/02/2067742.html
- http://www.cnblogs.com/strivers/archive/2011/02/06/1949477.html
- 委托----http://www.cnblogs.com/superpcer/archive/2011/06/06/2073751.html
- http://www.cnblogs.com/hnrainll/archive/2011/06/01/2067359.html
- http://www.cnblogs.com/hoojo/archive/2011/06/10/2077422.html Spring REST
- 混合高斯模型 http://www.cnblogs.com/CBDoctor/archive/2011/11/06/2236286.html
- tar命令(转自http://www.cnblogs.com/qq78292959/archive/2011/07/06/2099427.html)
- auto_ptr http://www.cnblogs.com/jtf-china/archive/2011/06/09/2076792.html
- 一个JavaScript的Hash类 http://www.cnblogs.com/fanrong/archive/2007/02/06/641556.html
- VS2010版本介绍(转自:http://www.cnblogs.com/Leo_wl/archive/2010/06/02/1750035.html)
- group_concat() http://www.cnblogs.com/wangtao_20/archive/2011/02/23/1961860.html
- java反射详解-原文地址:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html
- http://www.cnblogs.com/LeftNotEasy/archive/2011/05/02/basic-of-svm.html
- http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html
- http://www.cnblogs.com/angeldevil/archive/2011/12/02/2271096.html
- http://www.cnblogs.com/fnng/archive/2011/12/02/2272610.html
- C++模板 http://www.cnblogs.com/assemble8086/archive/2011/10/02/2198308.html
- http://www.cnblogs.com/cnajian/archive/2011/03/02/1968641.html
- (六十七)前缀、后缀运算符号在其他地方的使用
- iOS NSDictionary、NSData、JSON数据类型相互转换
- 实现TextView自动左右滚动文本
- 剑指offer系列之十:二进制中1的个数
- mysql之sql优化
- _beginthread http://www.cnblogs.com/whiteyun/archive/2011/06/02/2067742.html
- 摇一摇功能
- (六十八)组合运算符
- iOS开发常用第三方
- java下JSONObject的key值转为小写
- cocos游戏开发-vector的介绍
- 关于window.onload的一点认识
- 微信游戏
- (六十九)复合语句