HWND hwnd;
static UINT zzy(LPVOID pParam);//以上是在头文件中定义的;UINT CShutdownDlg::zzy(LPVOID pParam)
{ double i=0;
for(i;i<99999999;i++)
{
}
AfxMessageBox("工作者线程");
::PostMessage(hwnd,WM_QUIT,0,0);
return 0;
}//线程的执行体
BOOL CShutdownDlg::OnInitDialog()
{
CDialog::OnInitDialog(); hwnd=GetSafeHwnd();
AfxBeginThread(zzy,hwnd,THREAD_PRIORITY_NORMAL);//调用线程执行

// TODO: Add extra initialization here

return TRUE;  // return TRUE  unless you set the focus to a control
}
错误信息是说句柄,不可以应用在一个静态的函数中,好象是这么解释吧
error C2597: illegal reference to data member 'CShutdownDlg::hwnd' in a static member function
高手帮忙!!!!小弟谢谢

解决方案 »

  1.   

    UINT CShutdownDlg::zzy(LPVOID pParam)这个成员函数是静态的,而你在这个函数里访问了非静态的成员变量,所以报错。
      

  2.   

    static UINT zzy(LPVOID pParam);//以上是在头文件中定义的;
    在头文件中将这一句去除::PostMessage(hwnd,WM_QUIT,0,0);
    这一句改为PostQuitMessage(0);
      

  3.   

    你可以把HWND hwnd;定义为全局变量
      

  4.   

    HWND hwnd;
    static UINT zzy(LPVOID pParam);//以上是在头文件中定义的;UINT CShutdownDlg::zzy(LPVOID pParam)
    {         CShutdownDlg* pThis=(CShutdownDlg*)pParam;
    double i=0;
    for(i;i<99999999;i++)
    {
    }
    AfxMessageBox("工作者线程");
    ::PostMessage(pThis->GetSafeHwnd(),WM_QUIT,0,0);
    return 0;
    }//线程的执行体
    BOOL CShutdownDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();
    AfxBeginThread(zzy,(PVOID)this,THREAD_PRIORITY_NORMAL);//调用线程执行

    // TODO: Add extra initialization here

    return TRUE;  // return TRUE  unless you set the focus to a control
    }
      

  5.   

    同意 akiko(弥弥)
    定义为全局变量就可以了
      

  6.   

    static UINT zzy(LPVOID pParam);//以上是在头文件中定义的;
    UINT CShutdownDlg::zzy(LPVOID pParam)
    { double i=0;
    for(i;i<99999999;i++)
    {
    }
    AfxMessageBox("工作者线程");
    ::PostMessage(hwnd,WM_QUIT,0,0);
    return 0;
    }//线程的执行体
    --------------------------------------
    你这样定义有点矛盾,头文件里声明的函数改为:
    UINT zzy(LPVOID pParam);
    实现文件的函数定义改为:UINT zzy(LPVOID pParam)
    { double i=0;
    for(i;i<99999999;i++)
    {
    }
    AfxMessageBox("工作者线程");
    ::PostMessage((HWND)pParam,WM_QUIT,0,0);
    return 0;
    }//线程的执行体
      

  7.   

    同意楼上
    你把::PostMessage(hwnd,WM_QUIT,0,0);
    这一句改为PostQuitMessage(0);你的错误提示就没有了!
      

  8.   

    用Thunk, HWND是第一个元素吗? 那他的地址就是this:)其他的代码, 我可以发给你.
      

  9.   

    我也说两句吧,以前学UNIX的经验,静态函数里使用线程是不安全的,使用全局函数还得对共享变量进行控制(锁机制,信号量机制,同步机制)具体在MFC中如何做还不清楚!敬请多多指教!