首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

主线程为什么收不到工作线程的消息 ?该怎么处理

2012-01-16 
主线程为什么收不到工作线程的消息 ?????????这是一个对话框程序.在MyDlg.cpp中有:一个按钮,用于启动工作

主线程为什么收不到工作线程的消息 ?????????
这是一个对话框程序.

在MyDlg.cpp中有:

一个按钮,用于启动工作线程ThreadAD按钮IDC_RUN,有函数如下:
void   CEventTest2Dlg::OnRun()  
{
CWinThread*   pThreadAD=AfxBeginThread(ThreadAD,
NULL,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);

}


在工作线程ThreadAD中,采集数据,如果需要显示的话,给主线程发送消息(自定义的)
UINT   ThreadDA(LPVOID   pParam)
{
            ......
            if(需要显示)
            {
                          ::PostMessage(hwnd,WM_VOLTAGEDISPLAY,某某,NULL);
                          //需要显示就发送WM_VOLTAGEDISOPLAY

                          //   hwnd   是HWND   全局变量
                          //   在CEventTest2Dlg::OnInitDialog()中
        //   hwnd   =   AfxGetMainWnd()-> GetSafeHwnd();

              }
}

WM_VOLTAGEDISPLYAY消息处理函数:
LRESULT   CEventTest2Dlg::OnVoltageDisplay(WPARAM   wParam,   LPARAM   lParam)
{
CString   str;
str.Format( "%4.2f ",g_oldVoltageDisplay);
GetDlgItem(IDC_EDIT_VOLTAGEDISPLAY)-> SetWindowText(str);

return   0;
}

关于自定义消息的其他步骤都齐全,不再说明




[解决办法]
你应该通过一些办法确定哪步出了问题
是消息没有发出去,还是发出去了没有收到,还是收到了处理的不正确?
[解决办法]
线程正常启动了吗?
if(需要显示)正确进入了吗?
可以增加几个messagebox看看阿
[解决办法]
在线程中PostThreadMessage试试

[解决办法]
或者改称SendMessage
[解决办法]
改成static_cast <LPVOID> (this)试下
[解决办法]
CWinThread* pThreadAD=AfxBeginThread(ThreadAD,
NULL,
THREAD_PRIORITY_NORMAL,
0,
CREATE_SUSPENDED);

最后一个参数该城0

热点排行