SerialPort 用在PL2303

南有乔木cc 2020-10-13 10:11:37
这个类在打开 串口PL2303时,重复打开会出现串口被占用的情况,看了下是CreatFile没成功。
再次打开又可以了。
在do
{
SetEvent(m_hShutdownEvent);
} while (m_bThreadAlive);
TRACE("Thread ended\n");
//AfxMessageBox(L"ASGBRWHG")
这里加上一个弹窗就可以重复打开,为什么这个m_bThreadAlive 需要延迟,求各位大佬帮忙解答
...全文
268 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
平底锅锅锅 2020-10-29
  • 打赏
  • 举报
回复
死循环里要有延迟!
南有乔木cc 2020-10-14
  • 打赏
  • 举报
回复
顶 顶 顶 顶 顶 顶 顶
zgl7903 2020-10-13
  • 打赏
  • 举报
回复
m_Thread = NULL; //先初始化好 …… WaitForSingleObject(m_Thread, 2000); //等待线程结束
-飞鹤- 2020-10-13
  • 打赏
  • 举报
回复
0xcdcdcdcd表示变量未初始化,VS提供你有重大问题。这代码在Release下有问题。
南有乔木cc 2020-10-13
  • 打赏
  • 举报
回复
解决了 关闭不彻底 ClosePort 要加上 if((m_Thread!=(CWinThread*)0xcdcdcdcd)&&(m_Thread!=NULL)) { TerminateThread(m_Thread->m_hThread,NULL); m_Thread->ExitInstance(); m_Thread->Delete(); }这段代码就行了
南有乔木cc 2020-10-13
  • 打赏
  • 举报
回复
在别的串口芯片上比如Ch340使用上位机打开串口 就不会出现重复打开串口间隔性创建句柄失败的情况
南有乔木cc 2020-10-13
  • 打赏
  • 举报
回复
我发现是m_Com.StartMonitoring(); 监视线程引起的,把这句话屏蔽了,就可以重复打开串口 ///如果线程存在,则关掉进程 if (m_bThreadAlive) { do { SetEvent(m_hShutdownEvent); } while (m_bThreadAlive); TRACE("Thread ended\n"); //AfxMessageBox(L"ASGBRWHG"); } 会不会是m_hShutdownEvent 没完成,就CreatFile(), 导致创建句柄失败。 想知道原因

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧