//主窗口的一个接口,用来添加记录的
MainDlg::Log(char *log)
{
m_LogText+=_T(log);
UpdateData(0);
}
//线程中调用该接口
ThreadFun()
{
...
pdlg->Log("aaa");
//pdlg是MainDlg的指针,全局变量;
...
}每次都是UpdateData这里出异常错误
注释掉就没错,但不能刷新Log了这是什么问题?
怎么解决?
各位高手帮帮忙~ 急得要哭了 :~(
MainDlg::Log(char *log)
{
m_LogText+=_T(log);
UpdateData(0);
}
//线程中调用该接口
ThreadFun()
{
...
pdlg->Log("aaa");
//pdlg是MainDlg的指针,全局变量;
...
}每次都是UpdateData这里出异常错误
注释掉就没错,但不能刷新Log了这是什么问题?
怎么解决?
各位高手帮帮忙~ 急得要哭了 :~(
建议方法如下:在线程函数中pDlg->PostMessage(WM_LOG,,,);
然后建一个消息响应函数,让对话框处理该消息 并更新。
比如,你没有定义宏DECLARE_DYNCREATE()和IMPLEMENT_DYNCREATE(..)什么的。还有,跟踪一下m_LogText的内容哈。看你都要哭了,帮你UP一下,呵。
2)在线程函数中,调用log()之前,用ASSERT(::IsWindow(pDlg->m_hWnd))确认窗口有效
::SendMessage和::PostMessage是可以跨越线程边界的,应该不是“无效窗口句柄访问异常”的问题。
SetDlgItemText(IDC_LOG,m_LogText);
你可以跟踪一下,产生的错误就是窗口句柄无效的访问错误,但是不是因为SendMessage和PostMessage产生的。
谢谢skybblue(天蓝)和boxban(master-dreamer)
:)