4

我正在尝试使用 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()));

但我认为这不会起作用,因为 abort 不是 QNetworkReply 的插槽。

那么如何设置一种机制来停止从另一个线程进行此下载?我可以继承 QNetworkReply 并给该类适当的插槽。但我也想了解情况。

4

1 回答 1

2

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

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

于 2010-02-08T09:33:57.423 回答