UINT ProxyThread(LPVOID pParam)   
{
    return NULL;
}
char a='a';
m_pServerThread=AfxBeginThread(&ServerThread,&a,
                   THREAD_PRIORITY_NORMAL,0,
              CREATE_SUSPENDED);
这样可以把a的地址传过去吧?
可是在线程里怎么用不了a,比如char b=*a;有错误!

解决方案 »

  1.   

    你需要保证你在使用a时a还存在。
    a是局部变量吗?
      

  2.   

    新线程ProxyThread和创建ProxyThread的线程是并发执行的,所以有可能创建ProxyThread的线程已经return,这样自动变量a就会被释放,这时ProxyThread线程正好执行道使用a的地方,这样就会访问一块已经被释放的内存,所以出错。所以必须保证线程参数指针指向的地址,在线程使用它的所有地方都还有效。一般用自动变量都不能保证这点,所以要么用new/malloc动态内存分配,或者用static变量、类的数据成员一般都可以保证地址有效。
      

  3.   

    我这次把char a='f';声明为了全局变量,可是还是不行。
    UINT ProxyThread(LPVOID pParam)   
    {
        return NULL;
    }
    在线程里:pParam   0x00416c1 char b
              &b       0x00416c1 “f”
              *pParam  cxx0034: Error: types incompatible with operator
              b        102 'f'
    这是什么原因我还是无法得到变量b的值f?
    LPVOID可不可以换成别的类型?
      

  4.   

    由于pParam是LPVOID的类型,因此需要强制转换,具体可以如下操作,
    char *pChar = (char*)pParam;祝你好运