关于创建线程在win98蓝屏的现象
bool CComPort::Open(int nPort,ReceiveMode mode, DWORD dwBaud, Parity parity, BYTE DataBits,
StopBits stopbits,FlowControl fc)
{
//1.新建串口
if(this->m_pPort)
delete this->m_pPort;
this->m_pPort = new CSerialPort();
this->m_bIsOpen = false;
//2.判断收发模式
if(mode==ReceiveMode::ManualReceiveByQuery)
{
this->m_IsOverlapped = false;
}
else
{
this->m_IsOverlapped = true;
}
this->m_RecvMode = mode;
//3.转换参数,打开串口
int index;
index=parity-CComPort::EvenParity;
CSerialPort::Parity spParity=(CSerialPort::Parity)(CSerialPort::EvenParity+index);
index=stopbits-CComPort::OneStopBit;
CSerialPort::StopBits spStopbits=(CSerialPort::StopBits)(CSerialPort::OneStopBit+index);
index=fc-CComPort::NoFlowControl;
CSerialPort::FlowControl spFC=(CSerialPort::FlowControl)(CSerialPort::NoFlowControl+index) ;
try
{
this->m_pPort->Open(nPort,dwBaud,spParity,DataBits,spStopbits,spFC,m_IsOverlapped);
}
catch(CSerialException* pE)
{
//AfxMessageBox(pE->GetErrorMessage());
pE->Delete();
return false;
}
//it is important!!
COMMTIMEOUTS timeouts;
this->m_pPort->GetTimeouts(timeouts);
timeouts.ReadIntervalTimeout=10;
//timeouts.WriteTotalTimeoutConstant = 1000;
this->m_pPort->SetTimeouts(timeouts);
this->m_pPort->Purge(PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR);
this->m_pPort->Setup(4096,4096);
this->m_CurPortNum = nPort;
//创建关闭事件
this->m_hCloseEvent = CreateEvent(NULL,true,false,NULL);
if(this->m_hCloseEvent==NULL)
{
return false;
}
//4.创建线程类
this->m_pReadThread = new CReadComThread();
this->m_pReadThread->BandSerialPort(this);
this->m_pReadThread->Create();
this->m_pReadThread->Resume();
if(this->IsOverlapped())
{
this->m_hWriteEvent = ::CreateEvent(NULL,true,false,NULL);
if(this->m_hCloseEvent==NULL)
return false;
this->m_WriteOverlapped.hEvent = this->m_hWriteEvent;
}
this->m_bIsOpen = true;
return true;
}
以上是打开串口,调用的是CSerialPort控件!
现在问题是一关闭就会蓝屏,CSerialPort肯定没问题了,我想肯定错误出现在线程,以前没做过没有经验。大家帮帮我,下一页写上close