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()解决,但是他没详细说,不清楚怎么解决。

解决方案 »

  1.   

    问题解决一部分,
    SNMP_MGR_SESSION    pSessionTemp = *pSession;
    AfxBeginThread(ThreadFunc,&pSessionTemp);
    建一个临时变量就行了,但是不知道为什么,还请指教。
      

  2.   

    你不会传递了局部变量的地址吧,在test执行完之后局部变量就被自动回收了
      

  3.   

    线程参数只能传指针SNMP_MGR_SESSION    *pSessionTemp = NULL;
    AfxBeginThread(ThreadFunc,(LPVOID)&pSessionTemp);
      

  4.   

    线程参数只能传指针SNMP_MGR_SESSION    *pSessionTemp = NULL;
    AfxBeginThread(ThreadFunc,(LPVOID)&pSessionTemp);==================================
    pSessionTemp已经是指针了,为什么还要写(LPVOID)&pSessionTemp另外,原来传递的pSession本身就是指针
      

  5.   

    你不会传递了局部变量的地址吧,在test执行完之后局部变量就被自动回收了
    ====================================================================
    确实test执行完局部变量会回收,但是pSession和pSessionTemp都是局部变量,为什么传递过去结果就不一样呢?
      

  6.   

    我在前面写了PSNMP_MGR_SESSION是指向结构体的指针
      

  7.   

    哦,是指针了
    AfxBeginThread(ThreadFunc,&pSession);
    这么传不行?
      

  8.   

    pSession本身就是指针,为什么还要加一个&
      

  9.   

    &pSession is the pointer to a pointer.
      

  10.   

    &pSession is the pointer to a pointer.
    ========================================
    我也知道是指向指针的指针,我想知道的是:参数要求的是传递指针,为什么我传递了不好使,就算&pSession好使,那又为什么?
      

  11.   

    我也碰到了这个问题,一般来说,如果传值,直接强转传过去就可以,但是传其他的就不行了。
    一般我的做法是:在传之前,比如传一个字符串,先new一个char数组(或者相对应的对象),然后把对象的地址给传过去,那边接收完成以后再delete掉。
      

  12.   

    我也碰到了这个问题,一般来说,如果传值,直接强转传过去就可以,但是传其他的就不行了。
    一般我的做法是:在传之前,比如传一个字符串,先new一个char数组(或者相对应的对象),然后把对象的地址给传过去,那边接收完成以后再delete掉。
    ============================================================
    看来这个问题应该是经常出现,根本原因是什么呢,等待大侠相助了,不知道有没有人知道阿