在这篇文章中,我们会为大家详细推出C++ CreateThread参数的具体应用方法,以帮助大家能够从中获得一些帮助,提高编程效率。那么接下来就让我们一起来看看C++ CreateThread参数的正确使用方法吧。
项目是VS2005下的,用到了CreateThread函数,看到网上说不应该调用CreateThread,而应该使用_beginthreadex。因为刚好用到了,就还是写一下CreateThread中参数的使用方法。
先定义要传递的C++ CreateThread参数结构体:
typedef struct SParam
{
int No;
unsigned short chnlID;
unsigned short sessionID;
}uParam,*sParam;
DWORD WINAPI AccountManager(PVOID pParam);
void main()
{
DWORD dwThreadId;
HANDLE hThrd = NULL; // thread handle
SParam sparam;
SParam *p;
sparam.No = 1;
sparam.chnlID = 1;
sparam.sessionID = 1;
p = &sparam;
hThrd = (HANDLE)CreateThread(NULL,
0,
AccountManager,
p,
0,
dwThreadId;
}
DWORD WINAPI AccountManager(PVOID pParam)
{
sParam sparam;
sparam = (sParam)pParam;
try
{
/*Run为自己写的一个方法,Run(int i,unsigned short
chnlID,unsigned short sessionID)*/
Run(sparam->No,sparam->chnlID,sparam->sessionID);
}
catch (...)
{
logger.error("AccountManager(%d): System error.\r\n", threadId);
}
}
大体意思是这样,C++ CreateThread参数代码仅供参考。
CreateThread传递对象指针,在线程内转换过来,内存混乱.未进线程前,一切都没问题.对象内有char类型字符串成员,这个成员内的字符串是错的,时好时坏
确认一下传递进去的参数,生命周期是否已经结束,比如说,你定义了一个局部变量,作为参数传递给了createthread.如果不是这个问题,在createthread之前确认一下字符串是不是已经变了。然后分析一下原因。还有一个原因,就是其他内存的删除影响到了你内存,比如说你引入的Lib库和指定的.h文件不一致,也有可能出现这个问题
传入参数应当是全局变量或是用 new 生成的内存变量