Qt:QBuffer线程在此代码中是否安全

Qt: Is the QBuffer thread safe in this code?

本文关键字:代码 是否 安全 QBuffer 线程 Qt      更新时间:2023-10-16

代码给出如下:

class USBCamCaptureThread : public QThread
{
Q_OBJECT
void run() {
    while (!threadQuit){
        if (imageReaded){
            buffer->reset();
            Request = http->get (url->path(),buffer););
        }
        MG::SLEEP::msleep(250);
    }
 }
public:
USBCamCaptureThread(){
    QFile file("setting_files/cameraIP.txt");
    QString line = "192.168.1.5:80"; //default value
    if(file.open(QIODevice::ReadOnly)) {
        QTextStream in(&file);
        line = in.readLine();
    } 
    file.close();
    url = new QUrl(line);
    http = new QHttp(this);
    buffer = new QBuffer(&bytes);
    threadQuit = false;
    imageReaded = true;
}
~USBCamCaptureThread(){
}
public slots:
void Finished(int requestId, bool error){
        QImage localImage;
        localImage.loadFromData(bytes);
        QImg = localImage;
        bytes.clear();
        emit signalUSBImageRead();
}

请注意,Done() 在主线程中,run() 在工作线程中。可能的问题是通过读取/写入单独线程中的字节缓冲区,它会导致与线程相关的问题吗?

如果在

run处于活动状态时调用Finished,那么是的,您有问题。 在管道中运行的两个线程之间共享数据(串行)不一定是问题。 同时访问两个线程之间的非线程安全共享数据始终是一个问题。 我已经很多年没有使用Qt了,所以QBufferQImage::loadFromData也可以提供自己的线程安全保证。