gpt4 book ai didi

multithreading - 通过信号/插槽将 QVector 从工作线程传递到主线程

转载 作者:行者123 更新时间:2023-12-05 01:27:51 26 4
gpt4 key购买 nike

目前我在向线程之间传递 QVector 时遇到了一些麻烦。目前我有一个主线程(GUI-Thread)和一个经常发出 QVector 数组的工作线程。直接在向量内部发送数据之前看起来不错。接收器是主线程中的一个槽,但是槽接收到的数据是乱码。

这是我的代码的一些部分:

在工作线程中发出:

void Pipeline::process
{
QVector<float> buffer(w * h * d);

// filling the vector with RGB-Values

emit this->pushBuffer(buffer, w, h, d);
}

主线程中信号和槽的连接:
QObject::connect(this->_pipeline.data(), SIGNAL(pushBuffer(const QVector<float>, int, int, int)), this->ui->widgetFiltered, SLOT(setBuffer(const QVector<float>,int,int,int)));

主线程中的插槽:
void GLWidget::setBuffer(const QVector<float> buffer, int dataSizeX, int dataSizeY, int dataSizeZ)
{
// at this point the contents inside 'buffer' is garbled
}

Thread 是通过使用 QObject 的 moveToThread 和 QVector<float> 启动的。通过 qRegisterMetaType< QVector<float> >("QVector<float>"); 注册到元系统在主方法中。
Pipeline::process之后数据会不会丢失?返回?我不确定 QVector 里面的隐式共享如何在这种多线程情况下的行为。

任何帮助,将不胜感激。

你好

最佳答案

a) 注册元类型 QVector。在 app.exec() 之前添加这一行在您的主要功能中:

qRegisterMetaType<QVector<float> >("QVector<float>");

没有这个 QueuedConnection 将无法工作。

b) 明确说明您的信号和插槽通过 Qt::QueuedConnection 连接
如果您在连接后执行 moveToThread,这应该会在适当的线程中修复插槽执行。

关于multithreading - 通过信号/插槽将 QVector<float> 从工作线程传递到主线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10719553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com