我创建了个线程,在线程里读串口数据
CWinThread* thread = AfxBeginThread(LongHerderThread,(LPVOID)this,THREAD_PRIORITY_NORMAL,0,0,NULL);中途如果想停止的话,需要安全退出。但是现在只要点击界面的终了按钮,就会爆出各种各样的错误。CDialogEx::OnCancel();
用他结束线程后,再退出,一样会报错。PostThreadMessage(Rthread->m_nThreadID, WM_QUIT,0,0);请教安全退出的方法。

解决方案 »

  1.   

    先关闭串口。
    然后等待读串口的线程自己结束。(当然你的读串口线程必须可以检测到串口关闭,并自己结束)
    然后就和没有打开这个线程一样结束你的程序了。
    // Create.
    HANDLE hComm = ::CreateFile(...);
    //...
    HANDLE hThread = ::CreateThread(...);// Close
    CloseHandle(hComm);
    ::WaitForSingleObject(hThread,...);
      

  2.   

    给线程发送停止的消息,在while循环里不要break, 而是 bool bFlay = true;
    while(true == =bFlag)
    {
    ....
    }
    安全结束线程的时候将bFlag改成 false就退出线程了,但是有一个缺点,就是要等线程退出后才会出可形成程序,如果用在IE上,有点延时(个人经验),求交流。
      

  3.   

    弄个开关变量,线程while循环判断,点击停止按钮时关闭开关,跳出循环后关闭线程。