我正在尝试使用QT QNetworkAccessManager类来管理多线程C ++ / QT应用程序中的一些下载。
在worker 线程上(编辑:除了执行下载之外,线程是出于其他原因而分开),我想做一个外部服务器并准备接收结果代码:
...
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()));
但我认为这不会起作用,因为abort不是QNetworkReply的插槽。
那么如何设置一种可以从另一个线程停止下载的机制呢?我可以继承QNetworkReply并为该类提供适当的插槽。但我也想了解情况。
答案 0 :(得分:2)
您不需要工作线程来使用QNetworkAccessManager。它是异步的,因此可以从主线程中使用它。
在QThread中你实现了一个abortTheReply()插槽,你可以在其中执行m_reply-> abort()。然后将do_abort()信号连接到abortTheReply()。