//线程处理函数
DWORD WINAPI ShowAlertMessage(LPVOID lpParameter)
{
LPCSTR szMsg=(LPCTSTR)lpParameter;
MessageBox(NULL,szMsg,"报警信息",MB_OK|MB_ICONWARNING);
return 0L;
}//线程创建:
CreateThread(NULL,0,ShowAlertMessage,"报警",0,NULL);以上的方法没问题,可以弹出对话框,但我想在传递时传入字符串str如:
str="你好,谢谢";
CreateThread(NULL,0,ShowAlertMessage,(void*)&str,0,NULL);编译没问题,运行结果不对,显示乱码,调试发现没把数据传进去,地址对了,但没数据.
请问我该如何实现,谢谢!

解决方案 »

  1.   

    这是因为str是一个局部变量,当运行到LPCSTR szMsg=...的时候,该地址已经被释放了,可以申请一个空间:str = new char[16];
    strcpy(str,"你好,谢谢");DWORD WINAPI Show...(..)
    {
    ...
    MessageBox(...,szMsg,...);
    delete []szMsg;
    return 0;
    }
      

  2.   

    你可以传递CString所在的类的对象的this指针,如下:
    DWORD WINAPI ShowAlertMessage(LPVOID lpParameter)
    {
             CDlg * pDlg = (CDlg *)lpParameter; 
    LPCSTR szMsg=(LPCTSTR)pDlg->str;
    MessageBox(NULL,szMsg,"报警信息",MB_OK|MB_ICONWARNING);
    return 0L;
    }str="你好,谢谢";
    CreateThread(NULL,0,ShowAlertMessage,(LPVOID)this,0,NULL);
      

  3.   

    可以写为:
             ThreadStr = "你好,谢谢";
    char * p = ThreadStr.GetBuffer(ThreadStr.GetLength());
    CreateThread(NULL,0,ShowAlertMessage,(LPVOID)p,0,NULL);
      

  4.   

    保证显示的时候str还在生命期
      

  5.   

    可以用字符数组char[]在堆上开辟