XP下关闭串口问题
极速闪电 2005-05-27 12:32:49 在XP下面,在一个界面初始化时调用打开串口的函数,关闭时调用关闭串口的函数,如果‘打开/关闭’重复三次以上,就会出错,提示一出错时的信息'串口初始化错误'。不知怎么回事。估计是串口没有被关闭。(在Winme下绝少出现此情况)请问下应该怎么关闭串口?程序如下:
void Comm::OpenCom(CString strCom)
{
memset(&ov_read,0,sizeof(OVERLAPPED));
memset(&ov_write,0,sizeof(OVERLAPPED));
recvEvent=CreateEvent(NULL,TRUE,TRUE,NULL);
ov_read.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
ov_write.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
wndThread=hWndParent;//AfxGetMainWnd()->m_hWnd;
threadHnd=CreateThread((LPSECURITY_ATTRIBUTES)NULL,
0,
(LPTHREAD_START_ROUTINE)watchCom, (LPVOID)NULL,
0,
&threadID);
h_Com=CreateFile(strCom,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if(h_Com==(HANDLE)-1)
AfxMessageBox("串口初始化错误.");
if(!SetCommMask(h_Com,EV_CTS|EV_RXCHAR|EV_TXEMPTY))
AfxMessageBox("设置掩膜失败");
}
void Comm::CloseCom()
{
CloseHandle(h_Com);
CloseHandle(recvEvent);
CloseHandle(ov_read.hEvent);
CloseHandle(ov_write.hEvent);
CloseHandle(threadHnd);
}