我用VC++6.0编写一个对话框程序, 用于即时通信.
我开了一个线程专门接收消息.然后送到对话框上的CEdit控件显示出来.
我为CEdit控件关联了一个变量m_EditRecv, 然后这样:
...
CMyDlg *g_pMyDlg;
...
BOOL CMyDlg::OnInitDialog()
{
...
g_pQQdlg = this;
...
_beginthread(RecvThread, 0,NULL);
...
}并且增加了一个public函数:
int CMyDlg::AddMsg(char *msg)
{
UpdateData();
m_EditRecv.Insert(m_EditRecv.GetLength(), msg);
UpdateData(FALSE); // 就在这里死机的!!!!!!!!!!!!
return 0;
}在RecvThread中收到消息就调用g_pMyDlg->AddMsg(RecvBuf):
void RecvThread(void* dummy)
{
...
recvfrom(s, recvBuf, ...);
...
g_pQQdlg->AddMsg(recvBuf);
...
}运行的时候就发现在UpdateData(FALSE);那里死机了!
出现有这样内容的对话框:
Debug Assertion Failed!
Program: ...My.EXE
File:wincore.cpp
Line:879
....请问高手,是不是线程间传指针导致的问题? 是否要用FAR指针呢?
我开了一个线程专门接收消息.然后送到对话框上的CEdit控件显示出来.
我为CEdit控件关联了一个变量m_EditRecv, 然后这样:
...
CMyDlg *g_pMyDlg;
...
BOOL CMyDlg::OnInitDialog()
{
...
g_pQQdlg = this;
...
_beginthread(RecvThread, 0,NULL);
...
}并且增加了一个public函数:
int CMyDlg::AddMsg(char *msg)
{
UpdateData();
m_EditRecv.Insert(m_EditRecv.GetLength(), msg);
UpdateData(FALSE); // 就在这里死机的!!!!!!!!!!!!
return 0;
}在RecvThread中收到消息就调用g_pMyDlg->AddMsg(RecvBuf):
void RecvThread(void* dummy)
{
...
recvfrom(s, recvBuf, ...);
...
g_pQQdlg->AddMsg(recvBuf);
...
}运行的时候就发现在UpdateData(FALSE);那里死机了!
出现有这样内容的对话框:
Debug Assertion Failed!
Program: ...My.EXE
File:wincore.cpp
Line:879
....请问高手,是不是线程间传指针导致的问题? 是否要用FAR指针呢?
解决方案 »
- 一个小问题
- 自定义的CButton 型变量在CFrowView中如何进行初始化
- fatal error RC1015: cannot open include file 'res\hhaa.rc2'.
- 为什么使用Ctrl + v放在邮件编辑器中的内容不能马上显示出来,而要等OnDocumentCompleteExplorer1执行完毕后才能显示
- 打算学opengl,有几个问题,请大家支持一下!
- 问个Boost库的正则表达式问题
- 关于comm的问题
- ADO如何访问ORACLE中返回游标的函数???
- 请教如何从带参数的命令行程序的输入里提取输入的参数
- 关于Lotus Domino,哪位大虾能简单介绍一下?
- 能否实现CFileDialog操作后的路径还原(100分奉送)
- Direct3dCreate8(D3D_SDK_VERSION)求助
AfxGetApp()->m_pMainWnd->AddMsg(recvBuf);
试试。
AfxGetApp()->m_pMainWnd->AddMsg(recvBuf);
不行.将recvBuf置成静态变量也不行.难道只有用消息了吗?