前段时间发现项目中的上传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"); }
主进程重启上传软件,从而跳过断连。