QT 防止FTP 上传软件在断连处 Crash

前段时间发现项目中的上传FTP软件有可能会在从服务器申请断连时Crash, 所以加了一个Timer。

由于项目代码行数过大, 此处上传部分代码片段。

    timeoutTimer = new QTimer();
    connect(timeoutTimer, SIGNAL(timeout()), this, SLOT(doTimeout()));
    timeoutTimer->setInterval(4000);
    case QFtp::Closing:
        // The connection is closing down, but it is not yet closed. (The state will be Unconnected when the connection is closed.)
        pMain->debug( "Status(%d) = disconnecting from HOST", type );
        timeoutTimer->start();
        break;
    case QFtp::Unconnected:
        // There is no connection to the host.
        pMain->debug( "Status(%d) = disconnected status", type );
        if ( communicator->isPerforming() ) {
            communicator->abortRequest();   // abort performing command, maybe done(ERROR) should be called later
        }
        timeoutTimer->stop(); //stop timer
        break;
/** 
 *@projectName   BoeB9Project  
 *@author        Hasan 
 **/ 
void FtpHelper::doTimeout()
{
    pMain->debug("debug154545 timeout !!!!!!!");
    pMain->sendProxyMessage("MesUPLOADTimeout", ProxyMessage::Notify);
    timeoutTimer->stop();
}

在此进程发出MesUPLOADTimeout 信息之后, 项目主进程会从代理Proxy中接受此信息并进行处理。

/**
 *@projectName   BoeB9Project
 *@author        Hasan
 **/
void BoeB9QtmCellInlineMain::restartUploader()
{
    QProcess proc;
    QString c = "taskkill /im uploader.exe /f";
    proc.execute(c);
    proc.close();

    info("********info terminate uploader");

    QProcess *proc1 = new QProcess(this);

    proc1->start("cmd.exe", QStringList() <<"/c" << "c:///ORBKwsmcu/bin/start_uploader.bat");


    delete proc1;

    info("********info start uploader again");
}

主进程重启上传软件,从而跳过断连。

posted @ 2018-06-09 23:24  筱峰学长  阅读(279)  评论(0编辑  收藏  举报