C语言——_beginthreadex函数创建子线程

_beginthreadex是C语言用来创建子线程的函数,被声明在process.h头文件中,使用时需要结合windows.h头文件,即包含两个头文件,还要声明C外部声明,如下

#include   // for HANDLE
#include   // for _beginthread()
extern "C" //
{ 
    WINBASEAPI HWND WINAPI GetConsoleWindow(); 
}

_beginthreadex是基于 CreateThread,但比 CreateThread更安全(后来的事物总会比较早的先进),

使用示例如下:

unsigned int StrategyThread::startStrategyThread(Trader* trader)
{
	_mTrader = trader;
//主要是这一句,其他是本人做项目的时候,加的功能,与_beginthreadex无关
	_beginthreadex(NULL, 0, runOnStrategyThread, NULL, 0, &sThreadId);
	return sThreadId;
}
 //创建子线程,运行策略制作工作,函数返回值必须如下

unsigned int __stdcall runOnStrategyThread(void* lpvoid)
{  
//子线程运行在此函数内,
	return 0;
}



_beginthreadex的函数原型为


uintptr_t _beginthreadex( // NATIVE CODE  
       void *security,  //第1个参数:安全属性,NULL为默认安全属性  
       unsigned stack_size,  //第2个参数:指定线程堆栈的大小。如果为0,则线程堆栈大小和创建它的线程的相同。一般用0  
       unsigned ( __stdcall *start_address )( void * ),  //第3个参数:指定线程函数的地址,也就是线程调用执行的函数地址
       void *arglist,//第4个参数:传递给线程的参数的指针,可以通过传入对象的指针,
       unsigned initflag,  //第5个参数:线程初始状态,0:立即运行;CREATE_SUSPEND:suspended(悬挂)
       unsigned *thrdaddr   //第6个参数:用于记录线程ID的地址

    );


你可能感兴趣的:(C)