线程中断与插槽和信号
QThreads interruption with slots and signals
我有一个包含QThread
的类。在这个类的初始化函数中,线程应该被启动。这是正确的。在线程中,我有一个while(bool certainCondition){}
,这个certainCondition
应该通过信号/插槽连接来改变。
问题是在运行过程中信号/插槽没有打开。
您没有在线程中运行事件循环,或者在while循环中阻塞了很长时间。在您将控制返回给事件循环之前,您的slot不能被调用,这将在完成while循环之后发生。
作为一种解决方法,你可以尝试在while循环中调用QCoreApplication::processEvents()。
为了让信号/插槽跨线程工作,必须运行事件循环。
如果使用while循环,则事件循环永远不会运行,因此不会接收到信号。
事件循环通常是这样运行的:
void Thread::run()
{
...do something
exec(); //<<this runs the event loop
}
现在,您的问题是,您希望连续运行一些代码,直到满足某些条件。在上面的代码中,由于exec()
调用,这不起作用。
有两种可能来解决这个问题(取决于你想在循环中实现什么):
使用QTimer,假设每5秒触发一次,并调用一个插槽来执行重复代码。
使用QWaitCondition检查某个条件是否满足;但是你不能使用信号和插槽;而必须触发QWaitCondition
相关文章:
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- Qt moveToThread,带有参数的信号/插槽
- moc 文件中缺少信号插槽
- 文档在哪里说明如果参数不是从末端删除参数,则无法从QT信号插槽连接中删除参数?
- 信号/插槽多线程 Qt
- 通过排队的QT信号插槽连接发送QSHAREDPOINTERS的QVECTOR
- Qimage没有通过信号插槽QT
- 使用 Qt5 的新信号/插槽实现向滑块发出信号
- 一个类中的QT信号/插槽,但从不同的线程发出
- 信号/插槽基类多继承
- 在QT C 中使用QMOVIE和信号/插槽之间在GIF中导航
- 在 for 循环中使用 lambda 函数连接信号插槽
- 不同类别的 2 个对象之间的信号/插槽
- 如何正确使用qt的信号/插槽系统
- Qt信号插槽视觉工作室:似乎未连接
- QACTION信号插槽中的无形UI
- Qt-连接触发动作中的信号/插槽
- Qt 信号插槽类范围类型
- 信号/插槽 Qt5 C++