一个主线程,一个辅助线程(worker threads)。 
主线程中定义了一个全局结构: 
struct ThreadParam 

    HWND m_hWnd; 
    CString m_string1; 
    CString m_string2; 

主线程中将这个结构变量传递给辅助线程: 
ThreadParam pParam; 
//为pParam各成员变量赋值 
... 
//启动辅助线程 
AfxBeginThread(MyThreadProc,&pParam,THREAD_PRIORITY_NORMAL); 
... 
  
辅助线程中: 
UINT MyThreadProc(LPVOID pParam) { 
    ThreadParam *pThreadParam=(ThreadParam *)pParam; 
    ... 
    return 0; 

调试发现,pParam中的两个CString变量没有正确传递过来,而窗口句柄变量正确传递。 
我试过在结构中使用其他类型的变量,如int, char,都没问题。那么是否在线程中不能传递CString类型变量?

解决方案 »

  1.   

    是否与cstring的内容不定有关?
      

  2.   

    为什么非要用CString,用LPSTR不行吗?
      

  3.   

    我有个程序也是这么做的呀,和你的做法相同,但是没有问题呀,
    CString值都能正常得传过来呀?看你的过程看不出什么问题,我
    建议还是检查检查程序的其他部分吧,是不是在中间的什么时候
    把结构体里面的值改过呀?
      

  4.   

    没有,赋完值直接就启动线程。
    Debug这两个CString 的值是Error:expression cannot be evaluated.
    znormal你也是这么做的么?这就奇怪了。
      

  5.   

    我也使用过CString来付给线程,但是也正常的,如果debug下显示无法计算这个值,可能是你定义的变量有重复,造成局部和全局的冲突,或者没有rebuild的原因
      

  6.   

    我把原来主线程中的pParam参数改为Param了,其他的变量没有重复了,也重新rebuild过了,可还是不行。
    另外,如果我在主线程中直接用函数调用的方式:
    MyThreadProc(&Param);
    这样在MyThreadProc中得到的值是正确的。
      

  7.   

    GlobalAddAtom
    GlobalGetAtomName
    GlobalDeleteAtom
      

  8.   

    我现在改成用LPTSTR来传递了,没办法.