代码之家  ›  专栏  ›  技术社区  ›  Joe Soul-bringer

使用qnetworkaccessmanager.get,如何决定中止?

  •  4
  • Joe Soul-bringer  · 技术社区  · 15 年前

    我尝试使用QtQNETWorkAccess管理器类来管理多线程C++/QT应用程序中的一些下载。

    在职员工 线 (编辑:除了进行下载外,线程是由于其他原因而分离的),我想做一个到外部服务器的访问,并准备好接收带有代码的结果:

    ...
    m_nam = new QNetworkAccessManager(this);
    QNetworkReply *reply = m_nam->get(request);
    connect(m_nam, SIGNAL(finished(QNetworkReply *)), this, 
            SIGNAL(finished(QNetworkReply *)));
    ...
    

    但在下载完成之前,我可能会决定我对结果不感兴趣。

    所以我想通过发出一个信号do_abort()来设置一种从另一个线程断开连接的方法。

    这表明它自己是:

    connect(this, SIGNAL(do_abort()), reply, SLOT(abort()));
    

    但我不认为这会起作用,因为中止不是qnetworkreply的槽。

    那么,我如何设置一种机制来停止从另一个线程下载呢?我可以将qnetworkreply子类化,并为该类提供适当的槽。但我也想了解情况。

    1 回复  |  直到 15 年前
        1
  •  2
  •   guruz    15 年前

    使用QNetworkAccessManager不需要工作线程。它是异步的,所以可以从主线程使用它。

    在qthread中,您实现一个abort the reply()槽,在其中执行m_reply->abort()。然后,您将Do_Abort()信号连接到AbortThereply()。