<?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[Zeitmessung mit boost in Verbindung mit Java Server]]></title><description><![CDATA[<p>Moin,</p>
<p><strong>Kontext:</strong></p>
<p>Ich entwickele momentan ein Programm, das auf Anfragen eines Servers (Java), innerhalb von 2 Sekunden antworten muss.<br />
Wenn diese zwei Sekunden von meinem Programm überschritten werden, so gibt der Server ein Timeout zurück.</p>
<p>Das Schema von dem Script, welches ich benutze:</p>
<p>startTimeMeasurement();<br />
receiveAllRequests();<br />
answerAllRequests();<br />
OutputTimeMeasurement();</p>
<p>Die Kommunikation erfolgt über XML und Sockets, dafür benutze ich boost::asio low-Level-funktionen (write, read, mehr nicht).<br />
Tests haben ergeben, dass es für den Timeout-Fehler unerheblich ist, ob receiveAllRequests(); answerAllRequests(); etwas Sinnvolles tut oder nur Zeit verschwendet.</p>
<p><strong>Kompilierung:</strong><br />
Das Script habe ich sowohl unter Win XP 32bit (MingW TDragon) als auch unter Linux Ubuntu 32bit (GCC mitgeliefert) komiliert.</p>
<p>Das Programm wird auf dem Server ausgeführt, auf dem eine virtuelle Maschine (kA, welche genau) mit Ubuntu 32bit Server Edition läuft. Wenn ich ein Windows-Kompilat hochlade, wird das per Wine ausgeführt.</p>
<p><strong>Problem:</strong><br />
Der Server behauptet, mein Programm habe länger als 2 Sekunden gebraucht (Timeout-Antwort). Mein Programm wiederum behauptet, es hätte nur ca. 1,7 Sekunden gedauert.</p>
<p>Ich habe die Zeit auf zweierlei Weise ermittelt:<br />
boost::timer, wobei ich CLOCKS_PER_SEC an das System zur Laufzeit mit einem Umrechnungsfaktor angepasst habe<br />
boost::date_time mit einer Auflösung von Millisekunden</p>
<p>Beide geben Zeiten um 1,7 zurück - also deutlich unter 2.</p>
<p>Ich habe einen Freund gefragt, der hat dann ein Dummy-Programm in Java verfasst, das einfach nur 1,7 Sekunden wartet und dann etwas Sinnloses zurückgibt - das funktioniert prima.</p>
<p><strong>Schlusswort:</strong><br />
Ich habe überhaupt keine Ahnung, was mit meinem Programm schief laufen könnte. Insbesondere, da Tests eben zeigen, dass die Logik meines Programms keinen Einfluß auf die widersprüchlichen Zeitangaben hat.<br />
Ich bin den Code schon mehrfach durchgegangen, aber mir ist nie was in die Augen gesprungen, was damit zu tun haben könnte.</p>
<p>Ich bin für jeden Hinweis dankbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>MfG</p>
<p><strong>Codeauszüge:</strong></p>
<pre><code class="language-cpp">while(!trans.hasEnded()){

        Timer timer;
        std::string input = con.readAll();

        if(input.size() != 0){

            if(!parse(input)){
                throw std::runtime_error(&quot;ProtocolClient::runLoop() Unable to parse chunk&quot;);
            }

            std::cout&lt;&lt;&quot;Altogether that were &quot;&lt;&lt;timer.elapsed() &lt;&lt;&quot; seconds.&quot;&lt;&lt;std::endl;
        }
    }
</code></pre>
<p><strong>Timer.h:</strong></p>
<pre><code class="language-cpp">#ifndef TIMER_H
#define TIMER_H

#include &lt;boost/date_time.hpp&gt;

using namespace boost::posix_time;

class Timer{
    protected:
        ptime t1;

    public:
        Timer(): t1(microsec_clock::local_time()){}

        float elapsed() const{
            return (ptime(microsec_clock::local_time()) - t1).total_milliseconds() / 1000.0;
        }
};
#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/295283/zeitmessung-mit-boost-in-verbindung-mit-java-server</link><generator>RSS for Node</generator><lastBuildDate>Sat, 15 Aug 2026 12:04:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/295283.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 Nov 2011 15:21:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeitmessung mit boost in Verbindung mit Java Server on Thu, 10 Nov 2011 15:21:19 GMT]]></title><description><![CDATA[<p>Moin,</p>
<p><strong>Kontext:</strong></p>
<p>Ich entwickele momentan ein Programm, das auf Anfragen eines Servers (Java), innerhalb von 2 Sekunden antworten muss.<br />
Wenn diese zwei Sekunden von meinem Programm überschritten werden, so gibt der Server ein Timeout zurück.</p>
<p>Das Schema von dem Script, welches ich benutze:</p>
<p>startTimeMeasurement();<br />
receiveAllRequests();<br />
answerAllRequests();<br />
OutputTimeMeasurement();</p>
<p>Die Kommunikation erfolgt über XML und Sockets, dafür benutze ich boost::asio low-Level-funktionen (write, read, mehr nicht).<br />
Tests haben ergeben, dass es für den Timeout-Fehler unerheblich ist, ob receiveAllRequests(); answerAllRequests(); etwas Sinnvolles tut oder nur Zeit verschwendet.</p>
<p><strong>Kompilierung:</strong><br />
Das Script habe ich sowohl unter Win XP 32bit (MingW TDragon) als auch unter Linux Ubuntu 32bit (GCC mitgeliefert) komiliert.</p>
<p>Das Programm wird auf dem Server ausgeführt, auf dem eine virtuelle Maschine (kA, welche genau) mit Ubuntu 32bit Server Edition läuft. Wenn ich ein Windows-Kompilat hochlade, wird das per Wine ausgeführt.</p>
<p><strong>Problem:</strong><br />
Der Server behauptet, mein Programm habe länger als 2 Sekunden gebraucht (Timeout-Antwort). Mein Programm wiederum behauptet, es hätte nur ca. 1,7 Sekunden gedauert.</p>
<p>Ich habe die Zeit auf zweierlei Weise ermittelt:<br />
boost::timer, wobei ich CLOCKS_PER_SEC an das System zur Laufzeit mit einem Umrechnungsfaktor angepasst habe<br />
boost::date_time mit einer Auflösung von Millisekunden</p>
<p>Beide geben Zeiten um 1,7 zurück - also deutlich unter 2.</p>
<p>Ich habe einen Freund gefragt, der hat dann ein Dummy-Programm in Java verfasst, das einfach nur 1,7 Sekunden wartet und dann etwas Sinnloses zurückgibt - das funktioniert prima.</p>
<p><strong>Schlusswort:</strong><br />
Ich habe überhaupt keine Ahnung, was mit meinem Programm schief laufen könnte. Insbesondere, da Tests eben zeigen, dass die Logik meines Programms keinen Einfluß auf die widersprüchlichen Zeitangaben hat.<br />
Ich bin den Code schon mehrfach durchgegangen, aber mir ist nie was in die Augen gesprungen, was damit zu tun haben könnte.</p>
<p>Ich bin für jeden Hinweis dankbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>MfG</p>
<p><strong>Codeauszüge:</strong></p>
<pre><code class="language-cpp">while(!trans.hasEnded()){

        Timer timer;
        std::string input = con.readAll();

        if(input.size() != 0){

            if(!parse(input)){
                throw std::runtime_error(&quot;ProtocolClient::runLoop() Unable to parse chunk&quot;);
            }

            std::cout&lt;&lt;&quot;Altogether that were &quot;&lt;&lt;timer.elapsed() &lt;&lt;&quot; seconds.&quot;&lt;&lt;std::endl;
        }
    }
</code></pre>
<p><strong>Timer.h:</strong></p>
<pre><code class="language-cpp">#ifndef TIMER_H
#define TIMER_H

#include &lt;boost/date_time.hpp&gt;

using namespace boost::posix_time;

class Timer{
    protected:
        ptime t1;

    public:
        Timer(): t1(microsec_clock::local_time()){}

        float elapsed() const{
            return (ptime(microsec_clock::local_time()) - t1).total_milliseconds() / 1000.0;
        }
};
#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2142944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142944</guid><dc:creator><![CDATA[dispy]]></dc:creator><pubDate>Thu, 10 Nov 2011 15:21:19 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitmessung mit boost in Verbindung mit Java Server on Thu, 10 Nov 2011 16:31:03 GMT]]></title><description><![CDATA[<p>1.7 Sekunden sind eine Ewigkeit auf modernen Rechnern...<br />
Mir fallen dazu 2 Ansätze ein, um dem Problem auf die Schliche zu kommen:</p>
<ol>
<li>
<p>Loggin Ausgaben schreiben. Zu Beginn und zum Ende deines Programms gibts du den aktuellen Zeitstempel möglichst millisekundengenau aus, entweder auf einer Konsole oder du schreibst sie in eine Log Datei</p>
</li>
<li>
<p>Führ dein Programm mal im Stand-alone Modus mit den Parametern aus, die du im Anwendungsfall bekommst. Vielleicht bekommst du da einen Hinweise, ob und wo´s hakt.</p>
</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/2142965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2142965</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Thu, 10 Nov 2011 16:31:03 GMT</pubDate></item><item><title><![CDATA[Reply to Zeitmessung mit boost in Verbindung mit Java Server on Thu, 10 Nov 2011 21:13:13 GMT]]></title><description><![CDATA[<ol>
<li>
<p>Wo ist der Unterschied zu meiner Timer-Klasse? ob ich die jetzt einzeln ausgebe oder gleich eine Differenz berechne, macht keinen Unterschied.</p>
</li>
<li>
<p>Im Anwendungsfall werden routinemäßig Logs erstellt - diese Logs zeigen mir auch, dass das Script meint, nur ~ 1,7 Sekunden gelaufen zu sein.</p>
</li>
</ol>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2143082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2143082</guid><dc:creator><![CDATA[dispy]]></dc:creator><pubDate>Thu, 10 Nov 2011 21:13:13 GMT</pubDate></item></channel></rss>