主线程为什么收不到工作线程的消息 ?该怎么处理
主线程为什么收不到工作线程的消息 ?????????
这是一个对话框程序.
在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
这是一个对话框程序.
在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