<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Downloader programmieren]]></title><description><![CDATA[<p>hallo,<br />
ich sitze gerade an einem größeren projekt und komme an einem punkt nicht weiter. ich möchte es dem anwender meiner software ermöglichen dateien von einem server zu laden. dazu müssen bestimmte werte angegeben werden die dann als http request an einen server gesendet werden und der dann eine datei an den client zurückschickt. die übertragung klappt soweit ganz gut, nur komme ich mit den übertragngsdetails nicht ganz zurecht (wieviele bytes/s, wieviel zeit vergangen ist, wieviele bytes insgesamt übertragen wurden). ich arbeite mit dem framework qt. es gibt eine klasse qtime die es ermöglicht eine art stoppuhr zu benutzen. ich starte die uhr und frage nach wieviele sekunden nach dem letzten start vergangen sind. sind mehr als oder genau 1000 ms vergangen, also 1 sekunde, sollen alle statusdetails aktualisiert werden (Downloadspeed/s, Received Bytes, Elapsed Time).</p>
<pre><code>// Zustand der Downloadrate, der Downloadzeit und des Downloadvolumens aktualisieren
void Downloader::updateDataReadProgress(int bytesRead, int totalBytes)
{
    if(time-&gt;isNull())
    {
        qDebug() &lt;&lt; &quot;Timer gestartet&quot;;
        time-&gt;start();
    }

    // Aktualisierung pro Sekunde durchführen
    if(time-&gt;elapsed() &gt;= 1000)
    {                
        int dSpeed = bytesRead - bytesTemp;
        bytesTemp = bytesRead;

        if(dSpeed &gt;= 1000000)
        {
            dSpeed = dSpeed / 1000000;
            gui_downloader-&gt;getLabelSpeed()-&gt;setText(QString::number(dSpeed) + &quot; MByte/s&quot;);
        }
        else if(dSpeed &gt;= 1000)
        {
            dSpeed = dSpeed / 1000;
            gui_downloader-&gt;getLabelSpeed()-&gt;setText(QString::number(dSpeed) + &quot; kByte/s&quot;);
        }
        else
        {
            gui_downloader-&gt;getLabelSpeed()-&gt;setText(QString::number(dSpeed) + &quot; Byte/s&quot;);
        }

        //Verstrichene Zeit
        gui_downloader-&gt;getLabelTime()-&gt;setText(QString::number(test));

        if(bytesRead &gt;= 1000000)
        {
            bytesRead = bytesRead / 1000000;
            gui_downloader-&gt;getLabelSize()-&gt;setText(QString::number(bytesRead) + &quot; MByte&quot;);
        }
        else if(bytesRead &gt;= 1000)
        {
            bytesRead  = bytesRead / 1000;
            gui_downloader-&gt;getLabelSize()-&gt;setText(QString::number(bytesRead) + &quot; kByte&quot;);
        }
        else
        {
            gui_downloader-&gt;getLabelSize()-&gt;setText(QString::number(bytesRead) + &quot; Byte&quot;);
        }    

        //Zeit zurücksetzen
        qDebug() &lt;&lt; &quot;Timer zurückgesetzt&quot;;
        time-&gt;restart();
    }
}
</code></pre>
<p>die funktion wird mehrmals in der sekunde aufgerufen. bytesread enthält die bisher übertragenen bytes. um an den downloadspeed pro sekunde zu kommen habe ich einfach</p>
<pre><code>int dSpeed = bytesRead - bytesTemp;
        bytesTemp = bytesRead;
</code></pre>
<p>genommen.</p>
<p>das problem was ich jetzt habe ist das es nicht genau pro sekunde ist. habe eine stoppuhr daneben laufen lassen. das kommt daher das die if abfrage nicht genau bei 1000ms greift sondern der wert immer ein paar ms drüber liegt. gubt es eine andere möglichkeit solch einen downloader zu implementieren oder hat einer einen tip für mich ?</p>
<p>lg</p>
<p>marvel</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265419/downloader-programmieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 07:36:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265419.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Apr 2010 16:10:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Downloader programmieren on Thu, 22 Apr 2010 16:10:42 GMT]]></title><description><![CDATA[<p>hallo,<br />
ich sitze gerade an einem größeren projekt und komme an einem punkt nicht weiter. ich möchte es dem anwender meiner software ermöglichen dateien von einem server zu laden. dazu müssen bestimmte werte angegeben werden die dann als http request an einen server gesendet werden und der dann eine datei an den client zurückschickt. die übertragung klappt soweit ganz gut, nur komme ich mit den übertragngsdetails nicht ganz zurecht (wieviele bytes/s, wieviel zeit vergangen ist, wieviele bytes insgesamt übertragen wurden). ich arbeite mit dem framework qt. es gibt eine klasse qtime die es ermöglicht eine art stoppuhr zu benutzen. ich starte die uhr und frage nach wieviele sekunden nach dem letzten start vergangen sind. sind mehr als oder genau 1000 ms vergangen, also 1 sekunde, sollen alle statusdetails aktualisiert werden (Downloadspeed/s, Received Bytes, Elapsed Time).</p>
<pre><code>// Zustand der Downloadrate, der Downloadzeit und des Downloadvolumens aktualisieren
void Downloader::updateDataReadProgress(int bytesRead, int totalBytes)
{
    if(time-&gt;isNull())
    {
        qDebug() &lt;&lt; &quot;Timer gestartet&quot;;
        time-&gt;start();
    }

    // Aktualisierung pro Sekunde durchführen
    if(time-&gt;elapsed() &gt;= 1000)
    {                
        int dSpeed = bytesRead - bytesTemp;
        bytesTemp = bytesRead;

        if(dSpeed &gt;= 1000000)
        {
            dSpeed = dSpeed / 1000000;
            gui_downloader-&gt;getLabelSpeed()-&gt;setText(QString::number(dSpeed) + &quot; MByte/s&quot;);
        }
        else if(dSpeed &gt;= 1000)
        {
            dSpeed = dSpeed / 1000;
            gui_downloader-&gt;getLabelSpeed()-&gt;setText(QString::number(dSpeed) + &quot; kByte/s&quot;);
        }
        else
        {
            gui_downloader-&gt;getLabelSpeed()-&gt;setText(QString::number(dSpeed) + &quot; Byte/s&quot;);
        }

        //Verstrichene Zeit
        gui_downloader-&gt;getLabelTime()-&gt;setText(QString::number(test));

        if(bytesRead &gt;= 1000000)
        {
            bytesRead = bytesRead / 1000000;
            gui_downloader-&gt;getLabelSize()-&gt;setText(QString::number(bytesRead) + &quot; MByte&quot;);
        }
        else if(bytesRead &gt;= 1000)
        {
            bytesRead  = bytesRead / 1000;
            gui_downloader-&gt;getLabelSize()-&gt;setText(QString::number(bytesRead) + &quot; kByte&quot;);
        }
        else
        {
            gui_downloader-&gt;getLabelSize()-&gt;setText(QString::number(bytesRead) + &quot; Byte&quot;);
        }    

        //Zeit zurücksetzen
        qDebug() &lt;&lt; &quot;Timer zurückgesetzt&quot;;
        time-&gt;restart();
    }
}
</code></pre>
<p>die funktion wird mehrmals in der sekunde aufgerufen. bytesread enthält die bisher übertragenen bytes. um an den downloadspeed pro sekunde zu kommen habe ich einfach</p>
<pre><code>int dSpeed = bytesRead - bytesTemp;
        bytesTemp = bytesRead;
</code></pre>
<p>genommen.</p>
<p>das problem was ich jetzt habe ist das es nicht genau pro sekunde ist. habe eine stoppuhr daneben laufen lassen. das kommt daher das die if abfrage nicht genau bei 1000ms greift sondern der wert immer ein paar ms drüber liegt. gubt es eine andere möglichkeit solch einen downloader zu implementieren oder hat einer einen tip für mich ?</p>
<p>lg</p>
<p>marvel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1886862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1886862</guid><dc:creator><![CDATA[marvel14]]></dc:creator><pubDate>Thu, 22 Apr 2010 16:10:42 GMT</pubDate></item><item><title><![CDATA[Reply to Downloader programmieren on Thu, 22 Apr 2010 16:13:37 GMT]]></title><description><![CDATA[<p>Beziehe die vergangene Zeit in die Rechnung mit ein. So einfach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1886865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1886865</guid><dc:creator><![CDATA[Janjan]]></dc:creator><pubDate>Thu, 22 Apr 2010 16:13:37 GMT</pubDate></item><item><title><![CDATA[Reply to Downloader programmieren on Thu, 22 Apr 2010 17:26:34 GMT]]></title><description><![CDATA[<p>Du könntest</p>
<pre><code class="language-cpp">//statt dSpeed = dSpeed / 1000
dSpeed = dSpeed / time-&gt;elapsed()
</code></pre>
<p>benutzen, bzw time-&gt;elapsed() in einer Variable speichern die du für alle Funktionen benutzt. Die Updates kommen nicht unbedingt nach genau 1000ms, aber die kb/s-Anzeige stimmt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1886896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1886896</guid><dc:creator><![CDATA[nwp2]]></dc:creator><pubDate>Thu, 22 Apr 2010 17:26:34 GMT</pubDate></item></channel></rss>