• 子线程中调用主线程的窗口指针


       最近在研究VC多线程编程的问题,碰到了在子线程中调用主线程的窗口指针,使用了HWND* afxGetMainWnd(),如下面的线程函数:

    void threadFunc()
    {
        CTime time;
        CString strTime;
        m_bRun = TRUE;
        while(m_bRun)
        {
            time = CTime::GetCurrentTime();
            strTime = time.Format("%H:%M:%S");
            ::SetDlgItemText(AfxGetMainWnd()->m_hWnd, IDC_TIME, strTime);
            Sleep(1000);
        }
    }

       程序编译能够通过,当你运行到::SetDlgItemText()函数时,你会遇到访问地址冲突的问题。这是因为,在子线程里获取的主窗口指针,并非真正的窗口指针,所以不能对其操作。

       解决这个问题,你需要添加一个CWnd* m_pCWnd的全局变量,然后在主对话框的OnInitDialog()里面添加m_pCWnd = AfxGetMainWnd();最后修改上面出错的部分:

    ::SetDlgItemText(m_pCWnd->m_hWnd, IDC_TIME, strTime);

    运行程序,OK了。

  • 相关阅读:
    【集合遍历-Java】
    【eclipse】使用说明
    【Java IO流】浅谈io,bio,nio,aio
    【Mysql数据库】知识点总结
    【struts2】学习笔记
    【EL&JSTL】学习笔记
    思科交换机-常用命令及配置
    【JDBC-MVC模式】开发实例
    【JDBC】java连接MySQL数据库步骤
    【JDBC】Servlet实例
  • 原文地址:https://www.cnblogs.com/leven20061001/p/2750950.html
Copyright © 2020-2023  润新知