【发布时间】:2015-03-24 13:19:29
【问题描述】:
我想第一次使用 QFtp,并在 Google 上搜索了很多以了解应该如何使用它。这是一个典型的例子:
#include <QCoreApplication>
#include <QFtp>
#include <QFile>
int main(int argc, char ** argv)
{
QCoreApplication app(argc, argv);
QFile *file = new QFile( "C:\\Devel\\THP\\tmp\\test.txt" );
file->open(QIODevice::ReadWrite);
QFtp *ftp = new QFtp();
ftp->setTransferMode(QFtp::Active);
ftp->connectToHost("ftp.trolltech.com");
ftp->login();
ftp->cd("qt");
ftp->get("INSTALL",file);
ftp->close();
QObject::connect(ftp, SIGNAL(done(bool)), &app, SLOT(quit()));
int ret = app.exec();
delete ftp;
delete file;
return ret;
}
问题:
据我了解,需要 QCoreApplication 应用程序来处理“完成”信号,该信号在 ftp-get 完成时发出。现在,ftp->get 在连接之前被调用,甚至在应用程序处理程序运行之前调用(app.exec() 之后被调用)。
如果文件传输在“connect”语句之前已经完成,会发生什么?事实上,这不会发生,但我可以在ftp->close() 和 connect(...) 之间设置一个人为的延迟,比如 1 分钟。在此期间,ftp get 肯定会完成。会发生什么?
【问题讨论】:
-
如果 ftp 在事件循环开始之前完成,您的应用程序将不会退出,您将不得不终止其进程。
-
QFtp需要一个正在运行的事件循环来处理命令。因此,您可以在connect语句之前等待 10 000 年,这没有什么区别,因为您告诉QFtp执行的命令在您调用app.exec();之前不会被执行