问题现象:
我在一个串口类中(参考书上通用的那个cceserial类)接收到一个数据后,就用SendMessage(pSys->m_hWnd,WM_COMM_RXCHAR,(WPARAM)readBuf,NULL);函数将这个字节用消息发送出去。
然后在主对话框中进行消息响应,判断接收一个完整的数据帧后开始帧处理过程。处理过程主要是通过帧的命令,调用新的模态对话框。
在主对话框和模态对话框中,都有一样的三个按键。按键事件都是先重载
BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)
{
SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
return CDialog::PreTranslateMessage(pMsg);
}
然后,void CxxxDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
问题是:1、如果我在主对话框里,只按键,然后调用子模态对话框,按键返回主对话框,或是按键切换到别的菜单,怎么按都不会死机。
2、在主对话框里,只接收串口帧数据,在处理函数中,调用子模态对话框,然后在子模态对话框中按键,切换菜单或是返回主对话框,也不会死机。
3、但只要我接收串口数据后,再在主对话框中按键,程序就立马崩溃。
刚开始,我怀疑是内存泄露(应该不会立即死机吧),或者是哪地方的指针提前释放,以致于成为野指针,而导致死机。所以,我的串口接收也由之前的接收一个数据帧,改为只接收一个字节。这样也没有申请或释放的问题。但是,问题还是依旧。
大伙帮我分析一下啊。谢谢了。 怎么搞的,今天怎么老说我没登录呢,好好的登录的的。发表帖子时又让重新登录。幸好保存了所写的,不然就惨了。嘿嘿
我在一个串口类中(参考书上通用的那个cceserial类)接收到一个数据后,就用SendMessage(pSys->m_hWnd,WM_COMM_RXCHAR,(WPARAM)readBuf,NULL);函数将这个字节用消息发送出去。
然后在主对话框中进行消息响应,判断接收一个完整的数据帧后开始帧处理过程。处理过程主要是通过帧的命令,调用新的模态对话框。
在主对话框和模态对话框中,都有一样的三个按键。按键事件都是先重载
BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)
{
SendMessage(pMsg->message,pMsg->wParam,pMsg->lParam);
return CDialog::PreTranslateMessage(pMsg);
}
然后,void CxxxDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
问题是:1、如果我在主对话框里,只按键,然后调用子模态对话框,按键返回主对话框,或是按键切换到别的菜单,怎么按都不会死机。
2、在主对话框里,只接收串口帧数据,在处理函数中,调用子模态对话框,然后在子模态对话框中按键,切换菜单或是返回主对话框,也不会死机。
3、但只要我接收串口数据后,再在主对话框中按键,程序就立马崩溃。
刚开始,我怀疑是内存泄露(应该不会立即死机吧),或者是哪地方的指针提前释放,以致于成为野指针,而导致死机。所以,我的串口接收也由之前的接收一个数据帧,改为只接收一个字节。这样也没有申请或释放的问题。但是,问题还是依旧。
大伙帮我分析一下啊。谢谢了。 怎么搞的,今天怎么老说我没登录呢,好好的登录的的。发表帖子时又让重新登录。幸好保存了所写的,不然就惨了。嘿嘿
解决方案 »
- 如何改变mfc对话框程序,edit控件的背景颜色?
- 声卡采集基带信号时的问题
- error C2601: 'OnMouseWheel' : local function definitions are illegal
- 从exe,dll中获取版本信息的代码,请大家帮我看看这段代码哪里出了问题?50分!
- mfc逻辑坐标,gui坐标的原点分别在那?有没有转换的函数
- 一个ocx 和 几个dll 打包cab 成功 网页加载没反应 提示信息也没有 我的inf文件如下
- 请教高手!
- 请教,急!,mysql中为什么用odbc写入blob字段不成功
- vc如何实现一个变量的内容减去另一个变量的内容
- 请问哪里有2000年高级程序员考试的试题下在,急急急急急
- 关于原始套接字编程的计算检验和的一个问题
- 哪里有全部 FTP 协议指令,要全部。
DWORD CSysProtocal::ReadThreadFunc(LPVOID lparam)
{
CSysProtocal *pSys = (CSysProtocal*)lparam;
DWORD dwCommStatus = 0;
DWORD dwNumBytesRead = 0;
DWORD dwReadErrors;
COMSTAT cmState;
BYTE readBuf;
BOOL bReadResult = FALSE; ASSERT(pSys->m_hComm !=INVALID_HANDLE_VALUE);
PurgeComm(pSys->m_hComm, PURGE_RXCLEAR | PURGE_TXCLEAR);
SetCommMask (pSys->m_hComm, EV_RXCHAR | EV_CTS | EV_DSR );
while (TRUE)
{
bReadResult = WaitCommEvent(pSys->m_hComm,&dwCommStatus,NULL);
if (bReadResult && (dwCommStatus & EV_RXCHAR))
{
do
{
EnterCriticalSection(&pSys->m_cs);
ClearCommError(pSys->m_hComm,&dwReadErrors,&cmState);
if (cmState.cbInQue <= 0)
{
continue;
}
dwNumBytesRead = 0;
readBuf = 0;
bReadResult = ReadFile(pSys->m_hComm,
&readBuf,
1,
&dwNumBytesRead,
NULL);
LeaveCriticalSection(&pSys->m_cs);
if(bReadResult && dwNumBytesRead == 1)
{
SendMessage(pSys->m_hWnd,WM_COMM_RXCHAR,(WPARAM)readBuf,NULL);
}
}while(bReadResult && dwNumBytesRead == 1);
}
if (WaitForSingleObject(pSys->m_hReadCloseEvent,500) == WAIT_OBJECT_0)
{
break;
}
}
return 1;
}
说的是call brower吗?那里面一句话都没有。只有output那地方出现
The program '[0x23751482] RoomSystem.exe' has exited with code 1067 (0x42b)谢谢大伙支持