<?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[Logging in CEdit]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich hatte bereits vor einiger Zeit mal etwas über ein kleines Logging-Programm geschrieben.<br />
Erläuterung: ich erhlate auf div. Netzwerkports eingehende Verbindungen. Die Daten werden vom jeweiligen Thread in eine Queue geschrieben und anschließend ein Event gesetzt.<br />
Das Thread, das auf den Event wartet, liest die Daten aus der Queue und schreibt sie in ein CEdit.</p>
<p>Ablauf:</p>
<p>→ Event trifft ein<br />
→ alte Daten per GetWindowText( bla ) von CEdit lesen und in CString bla speichern<br />
→ neue Daten aus queue lesen und an CString bla anfügen<br />
→ Text in CEdit per SetWindowText( bla ) schreiben<br />
→ CEdit zur letzten Zeile scrollen</p>
<p>Jetzt zu meinen Problemen:</p>
<p>1. Ich halte die Idee mit dem Zwischenspeichern in einen CString für problematisch. Was passiert, wenn das Programm mal ein paar Tage läuft und entsprechend viel Speicher verbraucht ist?</p>
<p>2. Ich habe deshalb schon eine maximale Zeilenzahl eingeführt. Wird diese erreicht, dann werden die alten Zeilen verworfen und nur noch die neuen hinzugefügt.<br />
Aus einigen Programmen kenne aber das Verhalten, immer nur eine bestimmte Zahl an Zeilen zu haben, z.B. 100.<br />
Das Verarbeiten scheint einer Queue zu entsprechen: es wird immer am Ende ein neues Element angehängt.<br />
Ist die Queue voll, so wird das erste Element entfernt und ein neues kann wieder hinzugefügt werden.<br />
Aber wie wird dies realisiert? Gibt es nicht einen ziemlichen Overhead, wenn man wirklich eine Queue dafür verwendet und bei der Ausgabe immer Abfragen muss?</p>
<p>3. Ich habe noch ein kleines Problem beim Scrolling:<br />
Ab und zu bekomme ich eine Exception, wenn die ersten Daten geschrieben werden sollen.<br />
Ich habe das ganze schon auf das scrolling zurückführen können. Wenn noch nicht genügend Zeilen im Edit sind, dann existiert auch noch kein &quot;Scrollbar&quot;.<br />
Im Augenblick versuche ich das durch eine hardcodierte Minimal-zeilen-anzahl zu umgehen.<br />
Ist leider nicht ganz so schön, da erst nach ein paar Zeilen gescrollt wird.<br />
Hat hier vielleicht jemand eine besseren Lösungsvorschlag / Idee? (ich verwende hier leider noch VC6.0)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/161720/logging-in-cedit</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 13:44:56 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/161720.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Oct 2006 12:47:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Logging in CEdit on Tue, 10 Oct 2006 12:47:59 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich hatte bereits vor einiger Zeit mal etwas über ein kleines Logging-Programm geschrieben.<br />
Erläuterung: ich erhlate auf div. Netzwerkports eingehende Verbindungen. Die Daten werden vom jeweiligen Thread in eine Queue geschrieben und anschließend ein Event gesetzt.<br />
Das Thread, das auf den Event wartet, liest die Daten aus der Queue und schreibt sie in ein CEdit.</p>
<p>Ablauf:</p>
<p>→ Event trifft ein<br />
→ alte Daten per GetWindowText( bla ) von CEdit lesen und in CString bla speichern<br />
→ neue Daten aus queue lesen und an CString bla anfügen<br />
→ Text in CEdit per SetWindowText( bla ) schreiben<br />
→ CEdit zur letzten Zeile scrollen</p>
<p>Jetzt zu meinen Problemen:</p>
<p>1. Ich halte die Idee mit dem Zwischenspeichern in einen CString für problematisch. Was passiert, wenn das Programm mal ein paar Tage läuft und entsprechend viel Speicher verbraucht ist?</p>
<p>2. Ich habe deshalb schon eine maximale Zeilenzahl eingeführt. Wird diese erreicht, dann werden die alten Zeilen verworfen und nur noch die neuen hinzugefügt.<br />
Aus einigen Programmen kenne aber das Verhalten, immer nur eine bestimmte Zahl an Zeilen zu haben, z.B. 100.<br />
Das Verarbeiten scheint einer Queue zu entsprechen: es wird immer am Ende ein neues Element angehängt.<br />
Ist die Queue voll, so wird das erste Element entfernt und ein neues kann wieder hinzugefügt werden.<br />
Aber wie wird dies realisiert? Gibt es nicht einen ziemlichen Overhead, wenn man wirklich eine Queue dafür verwendet und bei der Ausgabe immer Abfragen muss?</p>
<p>3. Ich habe noch ein kleines Problem beim Scrolling:<br />
Ab und zu bekomme ich eine Exception, wenn die ersten Daten geschrieben werden sollen.<br />
Ich habe das ganze schon auf das scrolling zurückführen können. Wenn noch nicht genügend Zeilen im Edit sind, dann existiert auch noch kein &quot;Scrollbar&quot;.<br />
Im Augenblick versuche ich das durch eine hardcodierte Minimal-zeilen-anzahl zu umgehen.<br />
Ist leider nicht ganz so schön, da erst nach ein paar Zeilen gescrollt wird.<br />
Hat hier vielleicht jemand eine besseren Lösungsvorschlag / Idee? (ich verwende hier leider noch VC6.0)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152239</guid><dc:creator><![CDATA[SledgeIT]]></dc:creator><pubDate>Tue, 10 Oct 2006 12:47:59 GMT</pubDate></item><item><title><![CDATA[Reply to Logging in CEdit on Tue, 10 Oct 2006 12:58:41 GMT]]></title><description><![CDATA[<p>Warum ein Edit wenn du zeilenweise neuen Inhalt bekommst?<br />
Warum kein Listelement?</p>
<p>zu 2. Das Prinzip das die erste Zeile verworfen wird wenn eine neue hinzukommt ist das FIFO Prinzip (First-In-First-Out). Für die Fifos gibts einige Implementationen.</p>
<p>Hab das mit dem Listenelement noch nicht ausprobiert, aber dort gibt es bestimmt Möglichkeiten wie man bei Zeilenanzahl X die erste Zeile löschen kann und der Rest automatisch hochrückt. Wenn nicht muss das halt händisch gemacht werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152248</guid><dc:creator><![CDATA[McSnoop]]></dc:creator><pubDate>Tue, 10 Oct 2006 12:58:41 GMT</pubDate></item><item><title><![CDATA[Reply to Logging in CEdit on Tue, 10 Oct 2006 14:52:41 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/8018">@McSnoop</a>: vielen Dank.</p>
<p>CEdit, weil man über mehrere Zeilen hinweg Daten markieren und kopieren können soll. Geht das mit Listenelementen ebenfalls?</p>
<p>Das mit den FIFOs war in meiner Queue-Überlegung bereits inbegriffen.<br />
Beim Shiften der Zeilen muss aber doch trotzdem irgendeine kopier-arbeit erledigt werden, oder?</p>
<p>Wie wäre es hiermit?: man könnte die Daten vom Edit auslesen und temporär speichern. Dann entfernt man alles inkl. erstem Zeilenumbruch und hängt die neue Zeile an!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152279</guid><dc:creator><![CDATA[SledgeIT]]></dc:creator><pubDate>Tue, 10 Oct 2006 14:52:41 GMT</pubDate></item><item><title><![CDATA[Reply to Logging in CEdit on Tue, 10 Oct 2006 18:35:08 GMT]]></title><description><![CDATA[<p>Sicher. ListCtrls/Boxen hbane verschiedene Markierungsmodis. Single/Selektion, Extended...</p>
<p>Aber du kannst ReplaceSel verwenden. Damit kannst Du auch Text in eine Listebox hinzufügen. SetWindowText ist in jedem Falle langsamer, als wenn du den Text hinzufügst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152404</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152404</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 10 Oct 2006 18:35:08 GMT</pubDate></item><item><title><![CDATA[Reply to Logging in CEdit on Tue, 10 Oct 2006 19:34:01 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/35992">@Martin</a> Richter: vielen Dank für die Info, war mir nicht bewusst.</p>
<p>Für mich sahen die Lösungen in den gängigen Log-Tools / Terminals immer wie CEdits aus, aber ich werde das mit der ListBox mal testen.</p>
<p>Kannst Du mir bitte noch sagen, wie es mit der Performance/Speicherverbrauch aussieht?</p>
<p>Ich habe mir schon gedacht, dass SetWindowText langsam ist, aber für CEdit habe ich keine andere Möglichkeit gefunden.<br />
Ein InsertAt oder Add wären ja super, habe ich aber leider (noch) nicht gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152439</guid><dc:creator><![CDATA[SledgeIT]]></dc:creator><pubDate>Tue, 10 Oct 2006 19:34:01 GMT</pubDate></item><item><title><![CDATA[Reply to Logging in CEdit on Wed, 11 Oct 2006 09:54:24 GMT]]></title><description><![CDATA[<p>Ich habe es doch geschrieben: EM_REPLACESEL/ReplaceSel ist was Du mit Add suchst. Cursor ans Ende Positionieren mit EM_SETSEL/SetSel und dann einfach den neuen Text hinzufügen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1152774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1152774</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 11 Oct 2006 09:54:24 GMT</pubDate></item></channel></rss>