前段時間發現項目中的上傳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"); }
主進程重啟上傳軟體,從而跳過斷連。