我试图使用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()。