Qt4 を使用してアプリケーションを作成しています。
特定の http アドレスから非常に短いテキスト ファイルをダウンロードする必要があります。
ファイルは短く、アプリを続行できるようにするために必要なので、ダウンロードがブロックされていることを確認したいと思います (または、ファイルが見つからない/利用できない場合は数秒後にタイムアウトします)。
QHttp::get() を使用したかったのですが、これはノンブロッキング メソッドです。
スレッドを使用できると思いました: 私のアプリはそれを開始し、終了するのを待ちます。スレッドはダウンロードを処理し、ファイルのダウンロード時またはタイムアウト後に終了します。
しかし、私はそれを機能させることはできません:
class JSHttpGetterThread : public QThread
{
Q_OBJECT
public:
JSHttpGetterThread(QObject* pParent = NULL);
~JSHttpGetterThread();
virtual void run()
{
m_pHttp = new QHttp(this);
connect(m_pHttp, SIGNAL(requestFinished(int, bool)), this, SLOT(onRequestFinished(int, bool)));
m_pHttp->setHost("127.0.0.1");
m_pHttp->get("Foo.txt", &m_GetBuffer);
exec();
}
const QString& getDownloadedFileContent() const
{
return m_DownloadedFileContent;
}
private:
QHttp* m_pHttp;
QBuffer m_GetBuffer;
QString m_DownloadedFileContent;
private slots:
void onRequestFinished(int Id, bool Error)
{
m_DownloadedFileContent = "";
m_DownloadedFileContent.append(m_GetBuffer.buffer());
}
};
ダウンロードを開始するスレッドを作成するメソッドでは、次のことを行っています。
JSHttpGetterThread* pGetter = new JSHttpGetterThread(this);
pGetter->start();
pGetter->wait();
しかし、それは機能せず、アプリは待機し続けます。スロット「onRequestFinished」が呼び出されないように見えます。
何か案が ?
私がやろうとしていることを行うためのより良い方法はありますか?