解决一个Qt程序崩溃的问题

当Qt崩溃时,使用Qt Creator调试,也无法定位到是哪个地方除了问题。只发现日志报出一个Fatal。

复制代码
Fatal:  2023-11-05 00:16:26 [io\qprocess_win.cpp:826]  ASSERT: "pid" in file io\qprocess_win.cpp, line 826

触发的情况,就是使用QProcess同时启动多个进程时,主动退出进程导致的。

定位到代码的位置在:

cpp 复制代码
void zip7z::terminal()
{
    process.kill();
    process.waitForFinished();
}

这个 terminal 是在主线程被调用的。在process主动退出前,调用这个接口,就会卡死。

注释掉 process.waitForFinished(); 即可解决这个问题。怀疑是进程没有被kill掉,导致主线程一直阻塞,然后崩溃的。仅仅是怀疑,但我没有证据...

Qt官方文档对于这个接口的解释:

复制代码
Blocks until the process has finished and the finished() signal has been emitted, or until msecs milliseconds have passed.
Returns true if the process finished; otherwise returns false (if the operation timed out, if an error occurred, or if this QProcess is already finished).
This function can operate without an event loop. It is useful when writing non-GUI applications and when performing I/O operations in a non-GUI thread.
Warning: Calling this function from the main (GUI) thread might cause your user interface to freeze.
If msecs is -1, this function will not time out

总之,就是不要在主线程中使用这个接口,否则会导致UI卡主。

相关推荐
计算机安禾几秒前
【c++面向对象编程】第14篇:多态(一):虚函数——实现“一个接口,多种方法”
开发语言·c++
tellmewhoisi4 分钟前
单独抽取用户服务(请求不通):feign添加拦截器(添加token)
java·开发语言
Hua-Jay13 分钟前
OpenCV联合C++/Qt 学习笔记(十七)----凸包检测、直线检测及点集拟合
c++·笔记·qt·opencv·学习·计算机视觉
basketball61617 分钟前
C++ Lambda 表达式完全指南
开发语言·c++·算法
不知名的老吴18 分钟前
C++中emplace函数的不适场景总结(三)
开发语言·c++·算法
Java面试题总结28 分钟前
Go 里什么时候可以“panic”?
开发语言·后端·golang
rit843249929 分钟前
基于MATLAB平台的指纹识别系统实现
开发语言·matlab
沐知全栈开发39 分钟前
TypeScript String
开发语言
ch.ju1 小时前
Java程序设计(第3版)第三章——数组的动态获取
java·开发语言
曹牧1 小时前
Java:PDF文件扁平化处理
java·开发语言·pdf