【关于SerialPort串口类使用的有关问题?】

【关于SerialPort串口类使用的问题?】
视图类中申明CSerialPort m_Commport;
程序的串口数据操作能连接上。

添加一个按钮A,响应函数中添加
m_Commport.StopMonitoring();//线程挂起(调用SerialPort类中的线程挂起函数)
首先连接上串口,点击A线程挂起,然后关闭程序,界面关闭了,但程序的进程还是在任务管理器中。

然后再添加一个按钮B,响应函数中添加
m_Commport.RestartMonitoring();//恢复线程
首先先连接上串口,然后点击A挂起线程、然后点击B恢复线程,再点击右上角关闭按钮,界面关闭,在任务管理器中的进程也关闭了。

问题是:我准备直接在关闭按钮中调用按钮B的函数,就是首先连接上串口,然后按下A挂起线程,再点击右上角关闭按钮调用B恢复线程并且关闭程序,但是程序进程还是在任务管理器中。

void CMainFrame::OnClose() //主函数中(CAngleView视图函数,A、B函数都在里面)
{
if(MessageBox("确定要退出 ?","Exit",MB_YESNO|MB_ICONQUESTION|MB_DEFBUTTON2)==IDYES)
{
//断开连接
CMainFrame* pMFram = (CMainFrame*)AfxGetMainWnd(); 
CAngleView* pView  = (CAngleView*)GetActiveView();
pView->B; // 调用B按钮响应函数

CFrameWnd::OnClose(); 
}
else
{
return ;

}

------解决思路----------------------
引用:
问题解决了
关闭按钮中添加
exit(1);
【关于SerialPort串口类使用的有关问题?】
------解决思路----------------------
这么搞可以达到目的,但是理论上不能这么搞啊!

你不是调用了CFrameWnd::OnClose()了嘛,正常情况下程序会退出的。之所以你的这个没退出,我琢磨着是那个线程的缘故,B中恢复线程,该线程还在跑,你却把主窗口给关掉了.......

1、为嘛恢复线程让线程接着执行,却关闭应用程序?
2、线程何时退出,如何退出?

正常的逻辑应该是这样子的啊:你点击右上角关闭按钮,应该是要先结束线程,由于此时该线程是挂起状态,我琢磨着你就是想先恢复线程,让线程自动跑完吧? 实际上就是这么弄的,关键是你的线程函数写的合不合理了:首先是关闭主窗口这种情况下,线程即使有很多东西要处理,此时也一应不处理,直接返回掉;其次,你得弄个线程退出标志,在线程函数里面不停的去检测该退出标志,符合条件时就立即return 0;最后,为了保证在调用CFrameWnd::OnClose()之前线程已退出,你得在CFrameWnd::OnClose()前面去调用::WaitForSingleObject来检测该线程是否退出,比如检测2秒吧,两秒过后该线程句柄状态还是无效,就强行TerminateThread
------解决思路----------------------
exit你是强制退出进程了。你需要先解决为何线程不退出的问题。