一个基于对话框的串口通信程序,使用MSCOMM控件。
在主对话框类里定义:CMScomm m_com;
使用向导添加处理函数:OnCommMscomm();我现在的问题是:
正常情况:如果在主线程中打开、设置串口,则OnCommMscomm()能够响应串口数据。
异常情况:如果我在一个新起的子线程中打开、设置串口,如果线程没有结束,则OnCommMscomm()能够响应串口数据。如果此子线程结束,则OnCommMscomm()不响应串口数据。如果调用m_com.GetPortOpen()查看串口状态,却又是打开的!
m_com作为主对话框类成员,对该类来说应该是共享的,即使是在新启动的线程中打开,应该对整个类有效。只要我没在线程中关闭串口,即使线程结束,在该类的其它成员眼中,串口应该是处在打开并有效地状态吧?不解,是否是对线程理解有误?望各位见解一下,谢谢
在主对话框类里定义:CMScomm m_com;
使用向导添加处理函数:OnCommMscomm();我现在的问题是:
正常情况:如果在主线程中打开、设置串口,则OnCommMscomm()能够响应串口数据。
异常情况:如果我在一个新起的子线程中打开、设置串口,如果线程没有结束,则OnCommMscomm()能够响应串口数据。如果此子线程结束,则OnCommMscomm()不响应串口数据。如果调用m_com.GetPortOpen()查看串口状态,却又是打开的!
m_com作为主对话框类成员,对该类来说应该是共享的,即使是在新启动的线程中打开,应该对整个类有效。只要我没在线程中关闭串口,即使线程结束,在该类的其它成员眼中,串口应该是处在打开并有效地状态吧?不解,是否是对线程理解有误?望各位见解一下,谢谢
解决方案 »
- 界面的设计
- 从QQ进程中读取QQ号
- (急切求助)将某文件夹下所有文件名写入一个文本文件。。。
- 请问winsocket的I/O模型究竟是什么意思
- 编译模式的问题?
- 一个关于visual studio IDE 的问题。
- 请教,VC6中通过进程名检查进程是否已经存在,找不到Psapi.h文件
- 大家觉得一个自动考试系统所需要的功能有那些?
- 疑难问题:RegisterHotKey与Accelerator(加速建)有何区别????不知道书中说的特定线程的热建是何意思?????与Accelerator(加速建)有区别吗???
- 我的问题,很简单,但是我还是想问
- VS2005做WINCE界面时非模态对话框遇到的问题
- ACIS问题!
void CGpsTestWizardDlg::OnButtonRun()
{
// TODO: Add your control notification handler code here
if(m_com.GetPortOpen())
m_com.SetPortOpen(FALSE); m_com.SetCommPort(iPort);
if(!m_com.GetPortOpen())
m_com.SetPortOpen(TRUE);
else
AfxMessageBox("Can not open serial port"); m_com.SetSettings(szComSetting);
m_com.SetRThreshold(1);
m_com.SetInputMode(1);
m_com.SetInputLen(0);
m_com.GetInput();
return;
}
如果这样,在一个子线程中打开串口,则:如果子线程不结束,则串口响应正常。如果子线程结束,则串口无响应,但用m_com.GetPortOpen()查询却显示串口是打开的:
void CGpsTestWizardDlg::OnButtonRun()
{
// TODO: Add your control notification handler code here
::AfxBeginThread(ThreadGpsTest,(LPVOID)this);
return;
}UINT ThreadGpsTest(LPVOID pParam)
{
CGpsTestWizardDlg * pApp = (CGpsTestWizardDlg *)pParam; if(pApp->m_com.GetPortOpen())
pApp->m_com.SetPortOpen(FALSE); pApp->m_com.SetCommPort(iPort);
if(!pApp->m_com.GetPortOpen())
pApp->m_com.SetPortOpen(TRUE);
else
AfxMessageBox("Can not open serial port"); pApp->m_com.SetSettings(szComSetting);
pApp->m_com.SetRThreshold(1);
pApp->m_com.SetInputMode(1);
pApp->m_com.SetInputLen(0);
pApp->m_com.GetInput(); return 1; }