读书人

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

发布时间: 2012-01-16 23:36:51 作者: rapoo

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

在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

读书人网 >VC/MFC

热点推荐