void Tresenv::doStatusUpdate(Speedometer& speedometer)
{
    speedometer.beginNewInterval();
    
    if (opt_perfdisplay)
    {
        ::fprintf(fout, "** Event #%" LL "d   T=%s   Elapsed: %s%s\n",
                  simulation.getEventNumber(),
                  SIMTIME_STR(simulation.getSimTime()),
                  timeToStr(totalElapsed()),
                  progressPercentage()); // note: IDE launcher uses this to track progress
        ::fprintf(fout, "     Speed:     ev/sec=%g   simsec/sec=%g   ev/simsec=%g\n",
                  speedometer.getEventsPerSec(),
                  speedometer.getSimSecPerSec(),
                  speedometer.getEventsPerSimSec());
        
        ::fprintf(fout, "     Messages:  created: %ld   present: %ld   in FES: %d\n",
                  cMessage::getTotalMessageCount(),
                  cMessage::getLiveMessageCount(),
                  simulation.msgQueue.getLength());
    }
    else
    {
        ::fprintf(fout, "** Event #%" LL "d   T=%s   Elapsed: %s%s   ev/sec=%g\n",
                  simulation.getEventNumber(),
                  SIMTIME_STR(simulation.getSimTime()),
                  timeToStr(totalElapsed()),
                  progressPercentage(), // note: IDE launcher uses this to track progress
                  speedometer.getEventsPerSec());
    }
    
    // status update is always autoflushed (not only if opt_autoflush is on)
    ::fflush(fout);
}
void Tresenv::printEventBanner(cSimpleModule *mod)
{
    ::fprintf(fout, "** Event #%" LL "d  T=%s%s   %s (%s, id=%d)\n",
              simulation.getEventNumber(),
              SIMTIME_STR(simulation.getSimTime()),
              progressPercentage(), // note: IDE launcher uses this to track progress
              mod->getFullPath().c_str(),
              mod->getComponentType()->getName(),
              mod->getId()
              );
    if (opt_eventbanner_details)
    {
        ::fprintf(fout, "   Elapsed: %s   Messages: created: %ld  present: %ld  in FES: %d\n",
                  timeToStr(totalElapsed()),
                  cMessage::getTotalMessageCount(),
                  cMessage::getLiveMessageCount(),
                  simulation.msgQueue.getLength());
    }
}
Esempio n. 3
0
void
DownloadJob::onDownloadProgress( qint64 rcvd, qint64 total )
{
    if ( m_reply == 0 )
        return;

    if ( rcvd >= m_fileSize && m_fileSize > 0 )
    {
        m_finished = true;
    }

    if ( state() == Paused )
        return;

    m_rcvdSize = rcvd;
    m_fileSize = total;

    qint64 now = QDateTime::currentDateTime().toMSecsSinceEpoch();
    if ( ( now - 50 > m_rcvdStamp ) || ( rcvd == total ) )
    {
        m_rcvdStamp = now;
        if ( ( m_rcvdSize - 16384 > m_rcvdEmit ) || ( rcvd == total ) )
        {
            m_rcvdEmit = m_rcvdSize;
            emit progress( progressPercentage() );
        }
    }

    if ( !m_file )
        return;

    if ( !m_file->isOpen() )
    {
        if ( m_tryResuming && checkForResumedFile() )
            return;

        if ( !m_file->open( QIODevice::WriteOnly ) )
        {
            tLog() << Q_FUNC_INFO << "Failed opening file:" << m_file->fileName();
            setState( Failed );
            return;
        }
    }

    QByteArray data = m_reply->readAll();
    if ( data.isEmpty() )
        return;

    if ( m_file->write( data ) < 0 )
    {
        tLog() << Q_FUNC_INFO << "Failed writing to file:" << data.length();
        onDownloadError( QNetworkReply::UnknownContentError );
        return;
    }

    if ( m_rcvdSize >= m_fileSize && m_fileSize > 0 )
    {
        onDownloadFinished();
    }
    else if ( m_reply->isFinished() && m_reply->bytesAvailable() == 0 )
    {
        if ( ( m_fileSize > 0 && m_rcvdSize < m_fileSize ) || m_rcvdSize == 0 )
        {
            onDownloadError( QNetworkReply::UnknownContentError );
            return;
        }
    }
}