cn_list是一个结构
CreateThread(0,0,(LPTHREAD_START_ROUTINE)update_user_status,
(void*)cn_list,0,&threadID);为什么我向线程传递了参数后,在线程里提不出来呢?
UINT update_user_status(LPVOID param)
{    CClientDlg* dlg_r=(CClientDlg*)AfxGetMainWnd();;
    CListCtrl* plist=(CListCtrl*) dlg_r->GetDlgItem(IDC_LIST1); CN_list * cl=(CN_list *)&param;
   
CString id,err;   
id.Format("%s",cl->str); //id应该是"ssss"
return 0;
}

解决方案 »

  1.   

    (void*)cn_list
    CN_list * cl=(CN_list *)&param;
    有问题
      

  2.   

    Jarrylogin说得对,应该是 CN_list * cl=(CN_list *)param;
    另外还应该注意一点cn_list应该是一个全局变量或者在堆中分配的内存,如用malloc或者new分配的
      

  3.   

    CreateThread(0,0,(LPTHREAD_START_ROUTINE)update_user_status,
    (void*)cn_list,0,&threadID);
    ===============================
    CreateThread(0,0,(LPTHREAD_START_ROUTINE)update_user_status,
    (void*)this,0,&threadID);CClientDlg* dlg_r=(CClientDlg*)AfxGetMainWnd();
    ================================
    CClientDlg* dlg_r=(CClientDlg*)param;
      

  4.   

    param 已经是指针了你在考虑一下, 是不是改成 CN_list * cl = (CN_list *) param;
    另外,创建线程不要用 CreateThread() 函数,
    有 MFC 的AfxBeginTread ()
    或者 c 库的函数, 具体参考MSDN 或者 〈Windows 核心编程〉
      

  5.   

    用线程用AfxBeginTread 或_beginthread()