UINT ThreadFunc(LPVOID ThreadArg)
{
SNMP_MGR_SESSION argTemp = *(PSNMP_MGR_SESSION )ThreadArg;
WaitForTraps((PSNMP_MGR_SESSION )ThreadArg);
return 1;
}
int test()
{
PSNMP_MGR_SESSION pSession = NULL;
对pSession赋值...
AfxBeginThread(ThreadFunc,pSession);
}有些内容省略了。PSNMP_MGR_SESSION是指向结构体的指针。
在WaitForTraps((PSNMP_MGR_SESSION )ThreadArg);和AfxBeginThread(ThreadFunc,pSession);前面
设置断点,观察argTemp和pSession的内容,发现不一样。但是,传递其他值时,就是一样的。比如,
给AfxBeginThread传递一个整形的指针,在ThreadFunc中就没有改变。传递其他结构体指针也没问题。
实在不知道怎么回事,还请指教。在网上查了一下,有人曾说可以用SetEvent()解决,但是他没详细说,不清楚怎么解决。
SNMP_MGR_SESSION pSessionTemp = *pSession;
AfxBeginThread(ThreadFunc,&pSessionTemp);
建一个临时变量就行了,但是不知道为什么,还请指教。
AfxBeginThread(ThreadFunc,(LPVOID)&pSessionTemp);
AfxBeginThread(ThreadFunc,(LPVOID)&pSessionTemp);==================================
pSessionTemp已经是指针了,为什么还要写(LPVOID)&pSessionTemp另外,原来传递的pSession本身就是指针
====================================================================
确实test执行完局部变量会回收,但是pSession和pSessionTemp都是局部变量,为什么传递过去结果就不一样呢?
AfxBeginThread(ThreadFunc,&pSession);
这么传不行?
========================================
我也知道是指向指针的指针,我想知道的是:参数要求的是传递指针,为什么我传递了不好使,就算&pSession好使,那又为什么?
一般我的做法是:在传之前,比如传一个字符串,先new一个char数组(或者相对应的对象),然后把对象的地址给传过去,那边接收完成以后再delete掉。
一般我的做法是:在传之前,比如传一个字符串,先new一个char数组(或者相对应的对象),然后把对象的地址给传过去,那边接收完成以后再delete掉。
============================================================
看来这个问题应该是经常出现,根本原因是什么呢,等待大侠相助了,不知道有没有人知道阿