管道连接异常 --- 另主线程退出了,其他线程仍在转,导致进程不退出。

场景描述:
在测试 xEyeEngine.dll 数据管道引擎的时候,
问题1: 如果测试过程中,退出识别器引擎进程,则SDK_demo进程就崩掉。崩溃现场:

      CloseHandle( pipeFileHandle );
      ::WaitNamedPipe(...)
      提示, close a invalid handle .... 异常

问题2: 如果直接启动SDK_Demo, 让启动收管道数据线程,如果点击主界面关闭按钮,主界面关闭(主线程退出),但是进程仍在。。。

解决:
问题1:
通过在每次管道重连,也就是WaitNamedPipe 之前,查询识别器引擎进程是否还在,如果不在了,就不尝试重连,也就是不调用WaitNamedPipe 解决。

问题2:
一般情况下,主线程退出,其他的线程一般也跟着退出。。。就算是死循环的线程。。。但是,有的时候例外, 比如辅线程里面调用了windows的api WaitNamedPipe 之类的,就不会退出。像卡死了一样。
添加一个公共变量,如果主线程退出,设置该公共变量,其他线程在每帧循环中读取该变量。如果知道主线程退出,则自己也退出。

你可能感兴趣的:(windows,api,测试,引擎)