我试图使用QT QNetworkAccessManager类来管理多线程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子类化,并为该类提供适当的插槽。但我也想了解情况。

最佳答案

使用QNetworkAccessManager不需要辅助线程。它是异步的,因此可以在主线程中使用它。

在QThread中,您实现了abortTheReply()插槽,并在其中执行m_reply-> abort()。然后,将do_abort()信号连接到abortTheReply()。

10-08 02:09