ubuntu QT写抓包程序,用到qThread,动态显示分析后的数据,但是程序运行一段时间后出现“程序异常终止”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ubuntu QT写抓包程序,用到qThread,动态显示分析后的数据,但是程序运行一段时间后出现“程序异常终止”相关的知识,希望对你有一定的参考价值。

QObject::connect: Cannot queue arguments of type 'QTextCursor'
(Make sure 'QTextCursor' is registered using qRegisterMetaType().)
请问这问题如何解决呢?急求!!!

我前几天也出现了你同样的提示信息,执行可执行程序之后,弹出界面过段时间就会自动关闭,然后在命令终端显示这样的提示信息!但是我后来改变程序的调用方式之后,运行就OK了!我之前是在线程中直接调用类的槽函数去实现文本显示功能,后来我在线程类中定义了相应的信号和槽函数来实现相应的功能,这样就能成功的运行!你可以试试我的这种方法~如果你用到了connect函数,你可以查看connect函数的用法,添加相应的参数属性也可以解决这样的问题! 参考技术A 被采纳的是SB 参考技术B 需要你展示更多的代码,才能看看是什么原因

QT事件循环与QThread类的关闭quit(),wait()

1. 关于为什么关闭线程,释放资源的时候要先quit(),然后wait()

quit()函数是用来停止QThread的,但是由于Qt本身是事件循环机制,所以在调用完quit()后,QThread可能还没有完全停止,此时如果执行delete channel,程序就会报错。在执行quit()后,调用wait()来等待QThread子线程的结束(即从run()函数的返回),这样就能保证在清除QThread时,其子线程是停止运行的。

2. 事件循环机制

看到上面有一句话,“Qt本身是事件循环机制”,大家可能不理解什么是事件循环机制,大家可以看看这篇文章 https://zhuanlan.zhihu.com/p/72758194
我理解的是,调用quit()之后,将线程停止了,但是如果用户再次触发这个线程的启动,那么会导致你delete 了一个正在运行的线程,因此需要wait()来等待QThread子线程的结束

以上是关于ubuntu QT写抓包程序,用到qThread,动态显示分析后的数据,但是程序运行一段时间后出现“程序异常终止”的主要内容,如果未能解决你的问题,请参考以下文章

QThread::start(优先级) vs Linux

Qt - QThread(翻译帮助文档)

Qt系列文章之三十三 (基于QThread的信号量的线程同步)

Qt系列文章之三十三 (基于QThread的信号量的线程同步)

Qt:将事件发布到 QThread 的正确方法?

QT QThread::isrunning 冻结程序在 Pi