使用QNetworkAccessManager.get,我该如何决定中止?

时间:2010-02-06 08:54:45

标签: c++ multithreading http qt qnetworkaccessmanager

我正在尝试使用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并为该类提供适当的插槽。但我也想了解情况。

1 个答案:

答案 0 :(得分:2)

您不需要工作线程来使用QNetworkAccessManager。它是异步的,因此可以从主线程中使用它。

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