waitforsingleobject的一点点事情

来源:互联网 发布:川普的滑稽知乎 编辑:程序博客网 时间:2024/05/30 19:32

前几天,在写上位机代码的过程中,遇到了这样一个问题,当程序退出时,出现了卡死的现象。

刚开始没有去理会,但是当程序打开关闭多次之后,就有点不耐烦了,于是,debug一步步找出卡死原因。

跟上位机接口对接的是用VT,我不了解VT,以前也没用过VT,只是知道一点点应用,其中就有一个叫BB的东西,他是跟下位机对接的主要模块,说白了也就是windows上的一个DLL。于是,调试就从这个DLL的stop函数入手。

在stop()里面,调用了release(),在release里面实现了设备的关闭和内存的释放,两者都是在一个类里面实现,于是就进入类的析构,在类的析构里面,发现了一句waitforsingleobject(handle,INFINITE),程序就卡死在这里。

由于我不大懂windows编程,也不大懂windows上怎么用线程的,之前都是在linux上编程,于是只能google,终于,答案出来了,waitforsingleobject(handle,infinte)是在不断的等待handle的信号,我这里的handle是一个线程,如果线程不退出,就不会有返回,因为waitforsingleobject是阻塞的,所有程序卡死在那里,不断等待,看起来就是卡死得现象。

到这里,我才突然焕然大悟,原来是我关闭的时候,线程没有退出。之前,在我的记忆里,我只知道,进程关闭,它的线程都会被关闭,但是没有想到居然在主线程上阻塞自己...

解决办法很简单,让那个线程return就行了...

BB是一个很让我惊讶的地方,只要有点内存没释放,就会崩溃,在解决上面的问题后,我还得仔细研究下BB到底崩溃在哪里,所以,又 跟内存耗吧、、、

原创粉丝点击