void CalculationThread::run() { mdouble wavelength = Processor::LIGHTSPEED / _params.frequency; std::cout<<"Start angle: "<<_params.viewpointStartAngle<<", end angle: "<<_params.viewpointEndAngle<<std::endl; int iteration = 0; for (mdouble viewpointAzimuth = _params.viewpointStartAngle; viewpointAzimuth <= _params.viewpointEndAngle; viewpointAzimuth += _params.viewpointRotationStep) { if (_cancelled) return; mdouble x, y, z; y = _params.viewpointHeight; z = _params.viewpointDistance * cos(viewpointAzimuth); x = _params.viewpointDistance * sin(viewpointAzimuth); MVector viewpoint; viewpoint<<x, y, z; std::complex<mdouble> e = Processor::getE(viewpoint, _model, wavelength, _params.amplitude); Processor::CALCULATION_RESULT localResult; localResult.azimuth = viewpointAzimuth; localResult.E = std::abs(e); localResult.eComplex = e; _results.push_back(localResult); iteration++; emit iterationFinished(iteration); } }
void SyncController::run(bool saveLog, QFile* log) { this->saveLog = saveLog; this->log = log; input.open(stdin, QIODevice::ReadOnly); output.open(stdout, QIODevice::WriteOnly); quint32 cnt; QByteArray ba = input.read(4); QDataStream modify(&ba, QIODevice::ReadOnly); modify>>cnt; if(saveLog) { log->write("\nBytes for read: "+QByteArray::number(cnt)); log->flush(); } ba.clear(); forever { if(saveLog) { log->write("\nTry to read : "+QByteArray::number(cnt-ba.length())+" bytes"); log->flush(); } ba.append(input.read(cnt-ba.length())); if ((quint32)ba.length() >= cnt) { if(saveLog) { log->write("\nEnd readind - bytes limit reached"); log->flush(); } break; } if(saveLog) { log->write("\nBytes readed (part of packet): "+QByteArray::number(ba.length())+" needed: "+QByteArray::number(cnt)); log->flush(); } if (!input.waitForReadyRead(30000)) { if(saveLog) { log->write("\nEnd readind - wait limit reached"); if(!input.atEnd()) log->write(" and not at end"); log->flush(); } if(input.atEnd()) break; } //cnt -= ba.length(); /* if(saveLog) { log->write("\nLets dec waited to : "+QByteArray::number(cnt)); log->flush(); } */ } if(saveLog) { log->write("\nBytes readed: "+QByteArray::number(ba.length())); log->flush(); } QByteArray message; QDataStream in(&ba, QIODevice::ReadOnly); in.setVersion(QDataStream::Qt_5_4); in >> message; message = qUncompress(message); QByteArray command = message.left(message.indexOf('\n')); message = message.mid(command.length()+1); if(saveLog) { log->write("\nCommand:\n"+command); log->write("\nInput:\n"+message); log->flush(); } QByteArray answer; if (command.startsWith("Execute xml")) { sc.setXmlFile(message); QRegularExpression reg("send istate every (?<interations>\\d+) iterations"); QRegularExpressionMatch match = reg.match(command); if(match.hasMatch()) { iterationsToSend = match.captured("interations").toInt(); iterationsCount = 1; connect(&sc, SIGNAL(iterationFinished(SyncState)), this, SLOT(iterationFinished(SyncState))); } sc.run(); if(sc.getState()==SyncCore::syncFail) { answer = "Error\n"+sc.errorString().toUtf8(); } else { QRegularExpression reg("return connection \"(?<connection>.+)\""); QRegularExpressionMatch match = reg.match(command); if(match.hasMatch()) { answer = "Result xml\n"+sc.dump(match.captured("connection")); } else { QRegularExpression reg("return states"); QRegularExpressionMatch match = reg.match(command); if(match.hasMatch()) { QMap<int, SyncState> syncs = sc.getSyncsCompleted(); if(syncs.contains(2)) { SyncState ss = syncs.value(2); answer = "Result states "+ss.name.toUtf8() +" checked:"+QByteArray::number(ss.num) +" inserts:"+QByteArray::number(ss.numIns) +" insfail:"+QByteArray::number(ss.numInsFail) +" deletes:"+QByteArray::number(ss.numDel) +" delfail:"+QByteArray::number(ss.numDelFail) +" updates:"+QByteArray::number(ss.numUpd) +" updfail:"+QByteArray::number(ss.numUpdFail); } } } } } if(saveLog) { log->write("\nOutput:\n"+answer); log->write("\nMessage:\n"+formatMessage(answer).toHex()); } output.write(formatMessage(answer)); output.flush(); output.close(); input.close(); }