现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

C++ CreateThread参数具体应用技巧解析

2013-04-07 22:57 工业·编程 ⁄ 共 913字 ⁄ 字号 评论 3 条

    在这篇文章中,我们会为大家详细推出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参数代码仅供参考。

目前有 3 条留言    访客:3 条, 博主:0 条

  1. 爱求索 2013年04月15日 10:59 下午  @回复  Δ1楼 回复

    CreateThread传递对象指针,在线程内转换过来,内存混乱.未进线程前,一切都没问题.对象内有char类型字符串成员,这个成员内的字符串是错的,时好时坏

    • 爱求索 2013年04月15日 10:59 下午  @回复  ∇地下1层 回复

      确认一下传递进去的参数,生命周期是否已经结束,比如说,你定义了一个局部变量,作为参数传递给了createthread.如果不是这个问题,在createthread之前确认一下字符串是不是已经变了。然后分析一下原因。还有一个原因,就是其他内存的删除影响到了你内存,比如说你引入的Lib库和指定的.h文件不一致,也有可能出现这个问题

    • 爱求索 2013年04月15日 11:00 下午  @回复  ∇地下1层 回复

      传入参数应当是全局变量或是用 new 生成的内存变量

给我留言

留言无头像?