Qt信号发射和QThread执行流程
Qt signal emission and QThread execution flow
这是Qt的Threads和QObjects文档的一部分
直接连接 当信号 排放。该插槽在发射器的线程中执行,而不是 必须是接收器的线程。
所以让我们承认我被困在一个
while (this->true_bool);
在线程 1 中,线程 2 发出信号,连接到上面行的"this"对象的插槽,它会在循环退出后执行(所以永远不会(,还是会立即执行并在插槽返回后,它会回到 while(所以如果我将 this->true_bool 更改为 false,它将结束循环(?
对我来说,这似乎很奇怪,它会导致立即调用插槽,但文档似乎这么说。
它将
立即在线程 2 中执行,与线程 1 中的循环无关。
。该插槽在发射器的线程中执行,而不是 一定是接收器的线程...
编辑:我认为这个关于QThread的答案对你有用:https://stackoverflow.com/a/35056527/4149835
Qt调用工作如下:
- 直接连接。只要有直接连接,发出调用就会执行以下操作:枚举所有连接的插槽并逐个调用它们。插槽是函数,它们在发出调用期间立即被调用。因此,一旦
emit Something()
完成,直接连接到它的所有插槽都会被执行。可以将其视为在调用期间逐个执行的函数指针数组。因此,所有插槽都在您调用信号的同一线程上执行。 - 排队的连接。它类似于直接连接,但不是直接调用每个插槽,而是将其发布到与每个插槽关联的对象的队列中。因此,槽由与目标对象关联的事件循环执行。因此,它由目标对象所在的线程执行,而不是调用信号的线程(以防目标对象的线程和信号调用不同(。因此,当信号调用完成时,这意味着所有排队的连接
QEvents
都已发布到相应的队列中,但这并不意味着插槽尚未执行。
相关文章:
- 在程序执行期间从标准输出重定向到自定义流
- c++中的执行时间和检查流状态
- 张量流错误:执行器无法创建内核。没有注册'Snapshot' 适用于 GPU 设备的 OpKernel 运行图像标签示例
- 如何分离以C++执行的 Java 应用程序的 stdin/stout/stderr 流
- 如何在SDL2音频流数据上执行实时FFT
- (QT) QThread 不执行第二次
- 执行问题流
- Pycuda使用流执行推力
- 对理解C++代码的流执行稍有帮助
- 如何重载iostream运算符以在整个流上执行功能
- C++ 在写入流时执行函数
- C++ >>变量名称执行中的流
- 如何让输出流稍后执行某些操作
- cuda流:流执行后未调用回调
- cocos2d-X 中的执行流
- 为什么要使用fopen打开流,并使用读/写(而不是fread/fwrite)执行I/O
- QThread:使用 GUI 反馈阻止进行并行执行
- Clang静态分析-根据执行流检查可为空的变量初始化
- 块执行流,直到脚本执行完成
- 系统()调用批处理可执行流文件使程序在windows上重置