zoukankan      html  css  js  c++  java
  • 子线程中调用主线程的窗口指针

       最近在研究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了。

  • 相关阅读:
    Markdown入门
    HTTP协议 keep-alive连接 与 BS(firefox-thttpd)实验
    emoji探寻之路
    JavaScript实现绑定DOM的定时器插件
    C语言 str2bin 和 bin2str 实现
    LUA OOP 单例模式实现的 一个 方案
    LUA OOP编程实现方法
    以一则LUA实例说明敏捷开发中“分离构造和使用”原则
    HTML 中按钮作为form表单元素提交特性两则 --- 参HTML考标准分析
    分享:一款前端布局工具(alloydesigner)
  • 原文地址:https://www.cnblogs.com/leven20061001/p/2750950.html
Copyright © 2011-2022 走看看