欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-12-05 08:06:53
前段时间发现项目中的上传FTP软件有可能会在从服务器申请断连时Crash, 所以加了一个Timer。 由于项目代码行数过大, 此处上传部分代码片段。 在此进程发出MesUPLOADTimeout 信息之后, 项目主进程会从代理Proxy中接受此信息并进行处理。 主进程重启上传软件,从而跳过断连。 ......

前段时间发现项目中的上传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");
}

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