QWaitCondition:在线程仍在等待时被销毁

头像36

我的代码有问题,请帮忙。我越来越:

step 1
step 2
QSslSocket: cannot resolve TLSv1_1_client_method
QSslSocket: cannot resolve TLSv1_2_client_method
QSslSocket: cannot resolve TLSv1_1_server_method
QSslSocket: cannot resolve TLSv1_2_server_method
QSslSocket: cannot resolve SSL_select_next_proto
QSslSocket: cannot resolve SSL_CTX_set_next_proto_select_cb
QSslSocket: cannot resolve SSL_get0_next_proto_negotiated
step 3
step 4
Invalid parameter passed to C runtime function.
step 3
Invalid parameter passed to C runtime function.
ASSERT: "a && i >= 0 && i < (int)a->length" in file json\qjsonarray.cpp, line 527
QWaitCondition: Destroyed while threads are still waiting

我只是忽略QSslSocket错误,因为我知道这是由于https请求引起的,但我没有使用它。这是我的代码:

电影数据库

TheMovieDB::TheMovieDB(QWidget *parent):QWidget(parent)
{
    qDebug()<<"step 1";
    t_api_key="?api_key=******************";
    t_api_url="http://api.themoviedb.org/3/";
    t_manager = new QNetworkAccessManager;
    t_resultID=0;
}    

void TheMovieDB::search(const QString &title)
{
    qDebug()<<"step 2";
    t_title=GeneralFunctions::prepareString(title); //on normalise la chaîne (retire les accents)
    t_api_query= t_api_url + "search/movie" + t_api_key + "&language=fr&query=" + title;
    t_manager->get(QNetworkRequest(QUrl(t_api_query)));
    QObject::connect(t_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(readTitleSearch(QNetworkReply *)));
}

void TheMovieDB::readTitleSearch(QNetworkReply *reply)
{
    qDebug()<<"step 3";
    QString source = reply->readAll();
    QJsonDocument document = QJsonDocument::fromJson(source.toUtf8());
    QJsonObject jsonObj = document.object();
    QJsonArray obj = jsonObj["results"].toArray();
    QDate date;

    int distance=GeneralFunctions::distanceDL(t_title , obj[0].toObject()["title"].toString());
    t_resultID=obj[0].toObject()["id"].toInt();
    int distanceToBeCompared=0;

    for(int i = 1; i < obj.count(); i++){
        if(date.fromString(obj[i].toObject()["release_date"].toString(), "yyyy-MM-dd") < QDate::currentDate())
        {
            distanceToBeCompared=GeneralFunctions::distanceDL(t_title , obj[i].toObject()["title"].toString());
            if(distance > distanceToBeCompared)
            {
                distance=distanceToBeCompared;
                t_resultID=obj[i].toObject()["id"].toInt();
            }
        }
    }

    searchID(t_resultID);
}

void TheMovieDB::searchID(const int &id)
{
    qDebug()<<"step 4";
    t_api_query=t_api_url+"movie/"+QString::number(id)+t_api_key+"&language=fr";
    t_manager->get(QNetworkRequest(QUrl(t_api_query)));
    QObject::connect(t_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(readIDSearch(QNetworkReply *)));
}


void TheMovieDB::readIDSearch(QNetworkReply *reply)
{
    qDebug()<<"step 5";

    /* some code */

    emit idSearchDone();
}

电影数据库

class TheMovieDB:public QWidget
{
    Q_OBJECT

public:
    TheMovieDB(QWidget *parent=0);
    void search(const QString &title);
    QMap<QString, QVariant> t_infosList;
    void searchID(const int &id);

private:
    QString t_title;
    QString t_api_url;
    QString t_api_key;
    QString t_api_query;
    int t_resultID;
    QString t_picturePath;
    QNetworkAccessManager* t_manager;

public slots:
    void readTitleSearch(QNetworkReply *reply);
    void readIDSearch(QNetworkReply *reply);    

signals:
    void idSearchDone();

};

Main.cpp

TheMovieDB tmdb;
tmdb.search("avatar");

我应该有步骤1,2,3,4,5。但是,我现在要执行第二步而不是步骤3。谢谢您的帮助。我启动应用时出现问题。

头像36

在再次连接之前,我们必须从readTitleSearch断开之前完成的信号。为此,请添加:

t_manager->disconnect(t_manager, SIGNAL(finished(QNetworkReply *)), this, SLOT(readTitleSearch(QNetworkReply *)));

再次使用之前。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

QThread:在线程仍在QTest中运行时销毁

QThread 在线程仍在运行时被销毁

退出时“ QThread:线程仍在运行时被销毁”

线程仍在等待

PySide:线程销毁后仍在运行

销毁Servlet时HSQLDB计时器线程仍在运行

更改鼠标光标以等待光标,然后启动工作线程并在线程完成时返回

PyQt QThread:线程仍在运行时被销毁

PyQt5:线程仍在运行时被销毁

使用QWaitCondition唤醒线程

如何在线程循环内等待

等待时销毁condition_variable

如果在线程被阻塞等待创建新连接时连接返回到池中,是否会使用返回的连接?

当片段被销毁时杀死后台线程

尽管它在线程池中有足够的线程,但请求仍在Azure AppService中排队

多线程,线程仍在运行而无需等待其他线程

线程等待时连续处理

使用SwingWorker Java在线程池中等待任务

Qt5:如何在线程中等待信号?

在Java中,是否有一种方法可以在线程进入等待状态后而不是在完成时“加入”线程?

PySide2 QThread错误:QThread:线程仍在运行时被销毁

PyQt5-QThread:线程仍在运行时被销毁

PYQt5:QThread:线程仍在运行时销毁(实例分配为 QDialog )

建立查询时显示错误:“先前的操作仍在等待子句”

如何在线程完成时从线程中获取结果?

Flask服务器退出时线程仍在运行

“磁盘睡眠”中的进程时线程仍在运行吗?

在线程对象上调用start时,在线程上设置的优先级无效

Genymotion仍在等待“启动”