欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

qt的qftp会进行阻塞吗

更新时间: 2014-01-05 02:43:57 责任编辑: Author_N1

 

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里面的操作啊!
--参考方法--
void readyRead ()采用这个信号,当有这个信号的时候,表示网络上数据准备好了,可以读了,这时再读,

建立该信号的一个连接,在槽中实现读
--参考方法--
阻塞用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自己都不知道
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:43:57
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/13669/
本文WWW.DOC100.NET DOC100.NET版权所有。