是这样的,我要做一个串口通讯,期间用到了网上已经封装好的一个类,我看了下,觉得也挺安全好用的。在我的多文档程序中它没有出现任何问题,但是在对话框中加入相应的操作(我目前只是打开或关闭串口而已),在程序退出或者关闭串口的时候出现死机现象,这时用串口调试助手是无法打开相应串口的,必须得等1分钟左右程序才能正常关闭,然而,更悲剧的是程序关闭后在任务管理器中程序相应的线程还在运行,而我在跟踪调试的时候是已经将线程结束掉的,继续跟踪发现在执行底层关闭串口的CloseHandle一句话时出现了死机现象,不知道为什么,困扰我好长时间呢。。一直在调试,就是不行,也试了挺多方法了。都没能解决,谁遇到过相似的问题能给点点拨么??万分感谢了,我所有的这点分就给到这里了。

解决方案 »

  1.   

    是不是你调用CloseHandle的时候,串口资源还在被其他线程使用
      

  2.   

    你应该确保线程已经退出了,然后再关闭串口,或者你可以把CloseHandle注释掉试一下
      

  3.   

    我确保线程已经退出了,返回0,都跟踪过的。。注释掉CloseHandle我也试过,不行。。虽然程序正常结束了,但是串口并没有关闭,不能再用串口调试助手打开了,我感觉是不是工程类型的问题呢??我在多文档程序中使用的话没有任何问题的啊。就是把它原封不动的搬过来(我确定搬的正确)后就不行了。。有达人知道么?
      

  4.   

    跟踪下CloseHandle的值是多少,确定是否关闭成功,或许是你句柄没有正确引用吧?
      

  5.   

    CloseHandle只是收回句柄资源,这和关闭串口有什么关系
      

  6.   


    if (m_Comm != INVALID_HANDLE_VALUE)//m_Comm为串口句柄
    {
    CloseHandle(m_Comm);
    m_Comm = INVALID_HANDLE_VALUE;
        }
      

  7.   

    串口调试工具会死吗?
    如果也会死,串口驱动问题?是USB转串口?
      

  8.   

    就是执行CloseHandle这句话的时候程序就假死了。。
    我也坐了相应的判断了啊
    if(m_Com!=NULL)
    {
        CloseHandle(m_Com);
        m_Com = NULL;
    }
      

  9.   

    那串口是怎么打开的呢??CreateFile。
      

  10.   

    那就不要CloseHandle,资源的泄露暂时不考虑。
      

  11.   

    我的情况是在裁剪过的XPE系统上,拔掉串口卡,然后CLOSEHANDLE(),结果就系统蓝屏了。郁闷啊