VC串口编程问题,利用的是CSerialPort类。请各位帮帮忙!给了好的意见的还有加分~~ 5
我用的是CSerialPort这个类来实现的。就是我按下“打开串口”的按钮后,开始接收数据,程序正常工作;但是当我按下“关闭串口”(里面我是调用了CloseMonitor...
我用的是CSerialPort这个类来实现的。就是我按下“打开串口”的按钮后,开始接收数据,程序正常工作;但是当我按下“关闭串口”(里面我是调用了CloseMonitoring这个函数)后,再重新按“打开串口”之后程序出现问题、电脑也像死机一样,不动了。。谁有解决方法没?给了好的意见的还有加分~~
展开
展开全部
CSerialPort的关闭串口是有问题的,可以把CSerialPort中closePort()函数改为:
void CSerialPort::ClosePort()
{
// if the thread is alive: Kill
if (m_bThreadAlive)
{
MSG message;
while (m_bThreadAlive)
{
if(::PeekMessage(&message,m_pOwner->m_hWnd,0,0,PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}
SetEvent(m_hShutdownEvent);
}
TRACE("Thread ended/n");
}
if(m_szWriteBuffer != NULL) //清除写缓存
{
delete [] m_szWriteBuffer;
m_szWriteBuffer= NULL;
}
if(m_hComm) //关闭串口
{
CloseHandle(m_hComm);
m_hComm = NULL;
}
}
void CSerialPort::ClosePort()
{
// if the thread is alive: Kill
if (m_bThreadAlive)
{
MSG message;
while (m_bThreadAlive)
{
if(::PeekMessage(&message,m_pOwner->m_hWnd,0,0,PM_REMOVE))
{
::TranslateMessage(&message);
::DispatchMessage(&message);
}
SetEvent(m_hShutdownEvent);
}
TRACE("Thread ended/n");
}
if(m_szWriteBuffer != NULL) //清除写缓存
{
delete [] m_szWriteBuffer;
m_szWriteBuffer= NULL;
}
if(m_hComm) //关闭串口
{
CloseHandle(m_hComm);
m_hComm = NULL;
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
迪凯特科技(北京)有限公司
2023-07-28 广告
2023-07-28 广告
单片机串口通信的原理是利用单片机的串口通信模块,通过把数据转化为一位一位的用时序方式传送数据,实现单片机与外部设备之间的数据通信。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以...
点击进入详情页
本回答由迪凯特科技(北京)有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询