如何判断串口是否已经打开
怎么判断串口是否已经打开
用的API函数,比如在关闭串口前,需要先判断下是否已经打开,不然会报错,但是怎么判断呢,貌似不像串口控件那么简单
------解决方案--------------------
m_idComDev=CreateFile(m_sPort, // com1,2
GENERIC_READ
------解决方案--------------------
GENERIC_WRITE,
0, // sharemode 0=no share
NULL, // &sa
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL
------解决方案--------------------
FILE_FLAG_OVERLAPPED,
NULL); // tempfile
//
void CDload::CloseConnection()
{
if (!m_bConnected) return;
m_bConnected=FALSE;
SetCommMask(m_idComDev,0);
if (!m_pThreadCTS->m_hThread)
{
// terminate CommWatchEvent()
SetEvent(m_hPostEventCTS);
WaitForSingleObject(m_pThreadCTS->m_hThread,INFINITE);
}
m_pThreadCTS=NULL;
if ((m_pThreadWrite) && (!m_pThreadWrite->m_hThread))
{ // if "start" &&
// terminate CommWatchWrite
SetEvent(m_osWrite.hEvent);// if in 60s' waiting
SetEvent(m_hPostEventWrite);
WaitForSingleObject(m_pThreadWrite->m_hThread,INFINITE);
}
m_pThreadWrite=NULL;
// reset RTS
EscapeCommFunction(m_idComDev,CLRRTS);
// close Comm
PurgeComm(m_idComDev,PURGE_TXABORT
------解决方案--------------------
PURGE_RXABORT
------解决方案--------------------
PURGE_TXCLEAR
------解决方案--------------------
PURGE_RXCLEAR);
//
CloseHandle(m_idComDev);
}
------解决方案--------------------
“但是如果串口被别的程序打开”
如果 你先 打开 , 则你不关, 别人打不开的。
如果 别人已打开, 则 你是 打不开的。
------解决方案--------------------
设一个全局变量啊 bool flag=FLASE;
在打开串口里令flag=TRUE;
在关闭串口里判断
if(flag==TRUE)
{CloseHandle(hcom);}
------解决方案--------------------
CreateFile以独占方式打开,如果报错,查看GetLastError函数返回的错误码,就可以判断是否已经打开了
用的API函数,比如在关闭串口前,需要先判断下是否已经打开,不然会报错,但是怎么判断呢,貌似不像串口控件那么简单
------解决方案--------------------
m_idComDev=CreateFile(m_sPort, // com1,2
GENERIC_READ
------解决方案--------------------
GENERIC_WRITE,
0, // sharemode 0=no share
NULL, // &sa
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL
------解决方案--------------------
FILE_FLAG_OVERLAPPED,
NULL); // tempfile
//
void CDload::CloseConnection()
{
if (!m_bConnected) return;
m_bConnected=FALSE;
SetCommMask(m_idComDev,0);
if (!m_pThreadCTS->m_hThread)
{
// terminate CommWatchEvent()
SetEvent(m_hPostEventCTS);
WaitForSingleObject(m_pThreadCTS->m_hThread,INFINITE);
}
m_pThreadCTS=NULL;
if ((m_pThreadWrite) && (!m_pThreadWrite->m_hThread))
{ // if "start" &&
// terminate CommWatchWrite
SetEvent(m_osWrite.hEvent);// if in 60s' waiting
SetEvent(m_hPostEventWrite);
WaitForSingleObject(m_pThreadWrite->m_hThread,INFINITE);
}
m_pThreadWrite=NULL;
// reset RTS
EscapeCommFunction(m_idComDev,CLRRTS);
// close Comm
PurgeComm(m_idComDev,PURGE_TXABORT
------解决方案--------------------
PURGE_RXABORT
------解决方案--------------------
PURGE_TXCLEAR
------解决方案--------------------
PURGE_RXCLEAR);
//
CloseHandle(m_idComDev);
}
------解决方案--------------------
“但是如果串口被别的程序打开”
如果 你先 打开 , 则你不关, 别人打不开的。
如果 别人已打开, 则 你是 打不开的。
------解决方案--------------------
设一个全局变量啊 bool flag=FLASE;
在打开串口里令flag=TRUE;
在关闭串口里判断
if(flag==TRUE)
{CloseHandle(hcom);}
------解决方案--------------------
CreateFile以独占方式打开,如果报错,查看GetLastError函数返回的错误码,就可以判断是否已经打开了