_beginthreadex是C语言用来创建子线程的函数,被声明在process.h头文件中,使用时需要结合windows.h头文件,即包含两个头文件,还要声明C外部声明,如下
#include <windows.h> // for HANDLE
#include <process.h> // 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 CODEvoid *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的地址
);