您的位置:首页 > 编程语言 > C语言/C++

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

2017-02-03 14:14 676 查看
_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 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的地址

    );
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: