首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

Qt的QFtp会进行阻塞吗

2013-11-29 
Qt的QFtp能进行阻塞吗?我有个函数GetFile(int flag, char* GetFileInfo, char* ErrInfo),作用是从服务器下

Qt的QFtp能进行阻塞吗?
我有个函数GetFile(int flag, char* GetFileInfo, char* ErrInfo),作用是从服务器下载文件,
然后根据flag分为直接获取文件和只获取内容到 GetFileInfo ,从而删除文件。

我的做法是通过一系列的QFtp调用,


char *filepath = "D:\\TEST.file";
char *filename = "TEST.file";

ftp.connectToHost("192.168.126.128");
ftp.login("USER_FTP","123456");
ftp.cd("/tmp/dwntmp/"); 

file.setFileName(filepath);  
if (!file.open(QIODevice::ReadWrite)) 
{  
        return -1;  
}  
ftp.get(filename, &file, QFtp::Binary);  

if (GetFileInfo == NULL)
   flag = 1;
   
if (flag == 0)
{
QString line;
while ( !file.atEnd() )
{
               line = file.readLine();
       strcat(GetFileInfo, line.toStdString().c_str());
}

remove(filepath); /*删除文件*/
}

文件关闭是放到
但是,当我调用get后,由于是非阻塞的,所以程序会继续往下走!可我想在此处进行阻塞,
因为我是要等文件出来后,才能继续 flag == 0里面的操作啊!
[解决办法]
voidreadyRead ()采用这个信号,当有这个信号的时候,表示网络上数据准备好了,可以读了,这时再读,

建立该信号的一个连接,在槽中实现读
[解决办法]
阻塞用QEventLoop,把完成的信号和QEventLoop的quit()连接起来,然后在get之后立刻调用eventLoop.exec()
[解决办法]
我做过类似的事,QFtp有command start和command finished信号,

比如说
int cmd_id=cd("path");
while(isCommandFinished)
{
    sleep(1);
    processsevent();
}

你在command_finished时,
if(id==cmd_id)
{
   isCommandFinished=true;
}

大概这样就可以了,我不大支持eventloop的做法,因为进入eventloop后,你根本不知道程序运行到哪里了,
很难debug的,还没有exec,就已经quit自己都不知道

热点排行