<?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[Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen]]></title><description><![CDATA[<p>Aloha,</p>
<p>ich habe eine Client - Server App geschrieben. Ca. 100 User greifen auf den Server per Client zu.</p>
<p>Alle 30 Sekunden schicken die Clients an den Server eine Message, die der Server dann in einer Access DB ablegt.</p>
<p>Ist es nun sinnvoller die DB per</p>
<pre><code>m_DB.OpenEx(...)
</code></pre>
<p>einmal beim Start des Servers zu öffnen, und dann nur noch die einzelnen Tabelle zu öffnen und zu schließen, oder jedesmal, wenn ein Schreib- oder Lesezugriff auf die DB erfolgt die komplette DB öffnen und nach dem Zugriff wieder schließen ?</p>
<p>Besten Dank und Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180209/datenbank-bei-jedem-zugriff-öffnen-und-schließen-oder-nur-einmal-öffnen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 18 Apr 2026 01:16:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180209.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Apr 2007 07:21:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 07:21:45 GMT]]></title><description><![CDATA[<p>Aloha,</p>
<p>ich habe eine Client - Server App geschrieben. Ca. 100 User greifen auf den Server per Client zu.</p>
<p>Alle 30 Sekunden schicken die Clients an den Server eine Message, die der Server dann in einer Access DB ablegt.</p>
<p>Ist es nun sinnvoller die DB per</p>
<pre><code>m_DB.OpenEx(...)
</code></pre>
<p>einmal beim Start des Servers zu öffnen, und dann nur noch die einzelnen Tabelle zu öffnen und zu schließen, oder jedesmal, wenn ein Schreib- oder Lesezugriff auf die DB erfolgt die komplette DB öffnen und nach dem Zugriff wieder schließen ?</p>
<p>Besten Dank und Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276051</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276051</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 30 Apr 2007 07:21:45 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 08:03:03 GMT]]></title><description><![CDATA[<p>Ich empfinde es als langsamer, wenn ich jedes Mal extra die DB öffne.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276077</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276077</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Mon, 30 Apr 2007 08:03:03 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 08:13:35 GMT]]></title><description><![CDATA[<p>estartu schrieb:</p>
<blockquote>
<p>Ich empfinde es als langsamer, wenn ich jedes Mal extra die DB öffne.</p>
</blockquote>
<p>Aloha,</p>
<p>das empfinde ich auch, die Frage ist, kann es zu Seiteneffekten führen, wenn ich die DB die ganze Zeit offen lasse ?</p>
<p>Danke und Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276085</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 30 Apr 2007 08:13:35 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 08:14:39 GMT]]></title><description><![CDATA[<p>Wenn alle 30 Sekunden ein Zugriff erfolgt würde ich die Datenbank offen lassen.<br />
Das Problem sehe ich an sich schon in der Verwendung einer Access Datenbank.</p>
<p>Für diese Client Menge ist das Ding wirklich nicht gebaut. Bei einer gleichmässigen Verteilung hast Du wenigstens 3 Updates pro Sekunde mit sicherlich nicht geringen Wachstum der Datenbank.</p>
<p>Ich würde Dir von einer AccessDB abraten. Wenn jetzt noch lesende Clients dazukommen wird das zur keimenden Kartoffel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276087</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 30 Apr 2007 08:14:39 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 08:16:56 GMT]]></title><description><![CDATA[<p>Ich glaube, dass ich mir seitdem eher mal die DB sperre, also Parallelabfragen (oder was auch immer, da suche ich noch) nicht mehr möglich sind.<br />
Ich hoffe, ich denke dran, wenn ich den Fehler mal wieder habe, dann werde ich es mal testen. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1276088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276088</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Mon, 30 Apr 2007 08:16:56 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 08:29:37 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Wenn alle 30 Sekunden ein Zugriff erfolgt würde ich die Datenbank offen lassen.<br />
Das Problem sehe ich an sich schon in der Verwendung einer Access Datenbank.</p>
<p>Für diese Client Menge ist das Ding wirklich nicht gebaut. Bei einer gleichmässigen Verteilung hast Du wenigstens 3 Updates pro Sekunde mit sicherlich nicht geringen Wachstum der Datenbank.</p>
<p>Ich würde Dir von einer AccessDB abraten. Wenn jetzt noch lesende Clients dazukommen wird das zur keimenden Kartoffel.</p>
</blockquote>
<p>Aloha Martin,</p>
<p>nee, haste Dich verlesen. Nur der Server greift auf die DB !!!<br />
Und das passiert dann tatsächlich ca. bis zu 300 x die Minute, das aber auch nur in Spitzenzeiten.</p>
<p>Vorteil der Access DB ist, dank der Jet Engine läuft sie nun in einer Umgebung, auf die ich nicht wirklich Zugriff habe und wo auch kein Access installiert ist.</p>
<p>Meine Frage ist nach wie vor, ist es ungewöhnlich die DB die komplette Laufzeit offen zu lassen ?</p>
<p>Grüße und Danke</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276096</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 30 Apr 2007 08:29:37 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 08:32:02 GMT]]></title><description><![CDATA[<p>estartu schrieb:</p>
<blockquote>
<p>Ich glaube, dass ich mir seitdem eher mal die DB sperre, also Parallelabfragen (oder was auch immer, da suche ich noch) nicht mehr möglich sind.<br />
Ich hoffe, ich denke dran, wenn ich den Fehler mal wieder habe, dann werde ich es mal testen. <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>
</blockquote>
<p>Aloha,</p>
<p>genau das scheint mein Porblem ich bekomme ne Meldung</p>
<p><em>Das Microsoft Jet-Datenbankmodul hat den Vorgang angehalten, da Sie und ein weiterer Benutzer gleichzeitig versuchen, dieselben Daten zu verändern.</em></p>
<p>Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276100</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 30 Apr 2007 08:32:02 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 08:39:47 GMT]]></title><description><![CDATA[<p>Hast du nun eigentlich nur den Server, der nur ein Recordset hat und damit schreibt er? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Wenn das der Fall ist, dürftest du ja gar keine Parallelzugriffe haben.</p>
<p>Oder wie ist das gelöst? Wann wird geschrieben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276107</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Mon, 30 Apr 2007 08:39:47 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 09:14:55 GMT]]></title><description><![CDATA[<p>estartu schrieb:</p>
<blockquote>
<p>Hast du nun eigentlich nur den Server, der nur ein Recordset hat und damit schreibt er? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Wenn das der Fall ist, dürftest du ja gar keine Parallelzugriffe haben.</p>
<p>Oder wie ist das gelöst? Wann wird geschrieben?</p>
</blockquote>
<p>Aloha,</p>
<p>nein, wenn der Client eine Message schickt, öffnet der Server eine Tabelle und filtert nach der Client - ID einen bestimmten Datensatz der Tabelle raus ändert diesen, macht ein Update und schließt die Tabelle danach wieder.</p>
<p>Dann könnte die nächste Message abgearbeitet werden...</p>
<p>Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276125</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276125</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 30 Apr 2007 09:14:55 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 09:23:15 GMT]]></title><description><![CDATA[<p>Kann es also vorkommen, dass der zwei gleichzeitig schreiben will?<br />
Mach zur Not mal ein TRACE an den Anfang der Funktion und eins ans Ende, dann siehst du ob es daran liegt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276136</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Mon, 30 Apr 2007 09:23:15 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 09:27:21 GMT]]></title><description><![CDATA[<p>Also wenn nur der Server das Dingbraucht. Würde ich den gesamten Datenbankzugriff in einem Thread über eine Queue synchronisieren. Es würde sowieso synchronisiert werden, dann aber über die DB und das ist weitaus uneffektiver, als wenn Du alles in einer Queue sammelst und diese Queue von einem Thread abgearbeitet wird, der die ganze Zeit die DB natürlich offen hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276140</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Mon, 30 Apr 2007 09:27:21 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 09:36:36 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Also wenn nur der Server das Dingbraucht. Würde ich den gesamten Datenbankzugriff in einem Thread über eine Queue synchronisieren. Es würde sowieso synchronisiert werden, dann aber über die DB und das ist weitaus uneffektiver, als wenn Du alles in einer Queue sammelst und diese Queue von einem Thread abgearbeitet wird, der die ganze Zeit die DB natürlich offen hat.</p>
</blockquote>
<p>Aloha,</p>
<p>das ist gar keine schlechte Idee, danke für den Tip, werde ich mal andenken, ob ich das schnell umschreibe...</p>
<p>Und wie ich lese, ist es also auch nicht ungewöhnlich, dass die DB offen bleibt...</p>
<p>Danke und Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276148</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276148</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 30 Apr 2007 09:36:36 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 09:45:24 GMT]]></title><description><![CDATA[<p>estartu schrieb:</p>
<blockquote>
<p>Kann es also vorkommen, dass der zwei gleichzeitig schreiben will?<br />
Mach zur Not mal ein TRACE an den Anfang der Funktion und eins ans Ende, dann siehst du ob es daran liegt.</p>
</blockquote>
<p>Eigentlich sollte es nicht vorkommen, da nur alle 30 sekunden von einem Client eine Message geschickt wird. Soll heißen dergleiche Datensatz wird nur alle 30 Sekunden angefaßt....</p>
<p>Ich habe etwas gelesen, dass diese Fehlermeldung bei Access auch vorkommen kann, wenn die DB irgenwie beschädigt wurde. Man soll dann einfach alle Tabellen kopieren und in eine leere reinpacken.</p>
<p>Kennt sich damit jemand aus, geht das mit allen Tabellen auf einmal, oder nur einzeln ?</p>
<p>Grüße und Danke</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276159</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 30 Apr 2007 09:45:24 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 09:52:21 GMT]]></title><description><![CDATA[<p>BOA schrieb:</p>
<blockquote>
<p>estartu schrieb:</p>
<blockquote>
<p>Kann es also vorkommen, dass der zwei gleichzeitig schreiben will?<br />
Mach zur Not mal ein TRACE an den Anfang der Funktion und eins ans Ende, dann siehst du ob es daran liegt.</p>
</blockquote>
<p>Eigentlich sollte es nicht vorkommen, da nur alle 30 sekunden von einem Client eine Message geschickt wird. Soll heißen dergleiche Datensatz wird nur alle 30 Sekunden angefaßt....</p>
</blockquote>
<p>Kann es sein, dass die Meldung</p>
<blockquote>
<p>Das Microsoft Jet-Datenbankmodul hat den Vorgang angehalten, da Sie und ein weiterer Benutzer gleichzeitig versuchen, dieselben Daten zu verändern.</p>
</blockquote>
<p>heißt, dass du zweimal auf die gleiche <strong>Tabelle</strong> zugreifen willst?<br />
Das dachte ich bisher immer, aber von Jet habe ich keine Ahnung. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Und das wäre nicht alle 30 Sekunden, sondern eben bis zu 100 mal öfter. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276164</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Mon, 30 Apr 2007 09:52:21 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 10:09:57 GMT]]></title><description><![CDATA[<p>Aloha,</p>
<p>das ist eine gute Frage, ich hätte wie gesagt auf den Datensatz getippt.<br />
Ich muß das mal eruieren....</p>
<p>Aber ich denke, dass mit der DB auch etwas nicht stimmt, da in einzelnen Tabellen Werte geändert werden, ohne das ein Zugriff vom Server Proggi erfolgt... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Das ist schon spannend...</p>
<p>Grüße und Danke</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276179</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 30 Apr 2007 10:09:57 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 30 Apr 2007 12:45:56 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>das hat tatsächlich geholfen, eine neue DB anzulegen und die Tabellen hineinzukopieren.</p>
<p>Ich bekomme keine Fehlermeldungen mehr und auch ominöse Änderungen finden nicht mehr statt in den Tabellen...</p>
<p>Erstaunlich....</p>
<p>Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276279</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 30 Apr 2007 12:45:56 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Tue, 01 May 2007 00:13:31 GMT]]></title><description><![CDATA[<p>Wenn du kannst dann nimm den MSSQL 2005 Express. Ist wesentlich robuster und auch schön gratis. Einzig die Limitierung auf 2GB (oder waren es 4GB?) könnte u.U. lästig werden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276701</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 01 May 2007 00:13:31 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Tue, 01 May 2007 08:09:40 GMT]]></title><description><![CDATA[<p>MSDE 2000 war auf 2GB limitiert<br />
SQL 2005 Express auf 4GB</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276742</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 01 May 2007 08:09:40 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Mon, 07 May 2007 20:49:40 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Also wenn nur der Server das Dingbraucht. Würde ich den gesamten Datenbankzugriff in einem Thread über eine Queue synchronisieren. Es würde sowieso synchronisiert werden, dann aber über die DB und das ist weitaus uneffektiver, als wenn Du alles in einer Queue sammelst und diese Queue von einem Thread abgearbeitet wird, der die ganze Zeit die DB natürlich offen hat.</p>
</blockquote>
<p>Hi Martin,</p>
<p>zu dieser Queue Geschichte habe ich noch ne Frage.<br />
Ich habe mir nun ne &lt;list&gt; m_listeMessagesangelegt und lasse per Timer jede Sekunde diese in folgender Manier durchlaufen :</p>
<pre><code class="language-cpp">for(list&lt;mes&gt;::iterator itMes = m_listeMessages.begin(); itMes != m_listeMessages.end(); itMes++)
			{

				MessageReceive(itMes-&gt;message, itMes-&gt;sock);
				itMes = m_listeMessages.erase(itMes);
				itMes--;

			}
</code></pre>
<p>Wie reagiert das Programm eigentlich ? Ich arbeite nun z.B. 7 Nachrichten in der Schleife ab, in der zwischenzeit loggt sich ein neuer User ein. Wird die Schleife erst abgearbeitet oder wird die neue Message gleich in die Liste gepackt ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Hättest Du Deine Queue ähnlich gebastelt ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Danke und Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280583</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280583</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Mon, 07 May 2007 20:49:40 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Tue, 08 May 2007 06:13:30 GMT]]></title><description><![CDATA[<p>Wenn Du das so machst und ein anderer Thread fügt was in die Liste ein, dann wird es nicht lange dauern und Dein Listenobjekt ist zerstört.</p>
<p>Du musst in jedem Fall das Objekt blockieren durch eine Critical Section.</p>
<p>Und warum die Schleife durchlaufen?</p>
<pre><code class="language-cpp">CCriticalSection m_critical;
list&lt;mes&gt; m_listeMessages;
...
while (bProgramIsNotTerminated)
{
  mes m;
  bool bDoit = false;
  {
    CSingleLock lock(&amp;m_critical,TRUE);
    // Something to work
    if (m_listeMessages.size())
    {
      m = m_listeMessages.front();
      m_listeMessages.pop_front();
      bDoit = true;
    }
  }
  if (bDoit)
    MessageReceive(m.message, m.sock);
}
</code></pre>
<p>So kann auch während MessageReceive ausgeführt wird etwas in die Liste gepackt werden.</p>
<p>Wichtig ist das beim einfügen auch die Criticalsection verwendet wird.</p>
<pre><code class="language-cpp">mes m;
if (GetNextMes(m))
{
  CSingleLock lock(&amp;m_critical,TRUE);
  m_listeMessages.push_back(m);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1280634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280634</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 08 May 2007 06:13:30 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Tue, 08 May 2007 07:01:27 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Wenn Du das so machst und ein anderer Thread fügt was in die Liste ein, dann wird es nicht lange dauern und Dein Listenobjekt ist zerstört.</p>
<p>Du musst in jedem Fall das Objekt blockieren durch eine Critical Section.</p>
<p>Und warum die Schleife durchlaufen?</p>
<pre><code class="language-cpp">CCriticalSection m_critical;
list&lt;mes&gt; m_listeMessages;
...
while (bProgramIsNotTerminated)
{
  mes m;
  bool bDoit = false;
  {
    CSingleLock lock(&amp;m_critical,TRUE);
    // Something to work
    if (m_listeMessages.size())
    {
      m = m_listeMessages.front();
      m_listeMessages.pop_front();
      bDoit = true;
    }
  }
  if (bDoit)
    MessageReceive(m.message, m.sock);
}
</code></pre>
<p>So kann auch während MessageReceive ausgeführt wird etwas in die Liste gepackt werden.</p>
<p>Wichtig ist das beim einfügen auch die Criticalsection verwendet wird.</p>
<pre><code class="language-cpp">mes m;
if (GetNextMes(m))
{
  CSingleLock lock(&amp;m_critical,TRUE);
  m_listeMessages.push_back(m);
}
</code></pre>
</blockquote>
<p>Hallo,</p>
<p>vielen Dank für die schnelle Antwort.<br />
Diese Technik ist mir neu, speziell das mit dem CSingleLock und CCriticalSection.</p>
<p>Ich werde das einmal probieren umzusetzen und werde dann berichten, solange vielen Dank erstmal.</p>
<p>Beste Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280655</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Tue, 08 May 2007 07:01:27 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Tue, 08 May 2007 07:02:17 GMT]]></title><description><![CDATA[<p>Wenn Du mehrere Threads benutzt, dann ist das Pflicht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280656</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Tue, 08 May 2007 07:02:17 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Tue, 08 May 2007 07:34:51 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Wenn Du mehrere Threads benutzt, dann ist das Pflicht!</p>
</blockquote>
<p>Hi,</p>
<p>ja ich benutze mehrere Threads, und hatte auch ab und zu einen undefinierten Absturz der exe mit einer Speicherzugriffsverletzung...</p>
<p>Ich teste mal, vielen Dank.</p>
<p>Beste Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1280676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1280676</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Tue, 08 May 2007 07:34:51 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Wed, 09 May 2007 06:51:53 GMT]]></title><description><![CDATA[<p>Hallo Martin,</p>
<p>wenn ich das wie Du angegeben hast in einen Message Queue Thread verpacke, wo diese while - Schleife immer läuft, solange das Programm läuft und schaut, ob ich eine neue Message zum Abarbeiten habe.</p>
<p>Das belastet aber den Prozessor mit 100%....</p>
<p>Kann ich nicht so etwas machen ?</p>
<pre><code class="language-cpp">CSingleLock lock(&amp;m_critical,TRUE);

for(list&lt;mes&gt;::iterator itMes = m_listeMessages.begin(); itMes != m_listeMessages.end(); itMes++)
{

MessageReceive(itMes-&gt;message, itMes-&gt;sock);
itMes = m_listeMessages.erase(itMes);
itMes--;

}
</code></pre>
<p>Muß ich nicht eigentlich nach einem Lock ein Unlock machen ?</p>
<p>Besten Dank und Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281312</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Wed, 09 May 2007 06:51:53 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Wed, 09 May 2007 08:37:12 GMT]]></title><description><![CDATA[<p>Schau Dir mal bitte meinen Code an!<br />
Dein Code kan nicht funktionieren. Er nimmt die Liste in Beschlag und gibt sie nicht frei!<br />
Und ja. Du solltest ein Event haben, was diese Schleife nur bei Bedarf anstösst und ansonsten den Thread schlafen lässt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281379</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 09 May 2007 08:37:12 GMT</pubDate></item><item><title><![CDATA[Reply to Datenbank bei jedem Zugriff öffnen und schließen oder nur einmal öffnen on Wed, 09 May 2007 09:36:02 GMT]]></title><description><![CDATA[<p>Martin Richter schrieb:</p>
<blockquote>
<p>Schau Dir mal bitte meinen Code an!<br />
Dein Code kan nicht funktionieren. Er nimmt die Liste in Beschlag und gibt sie nicht frei!<br />
Und ja. Du solltest ein Event haben, was diese Schleife nur bei Bedarf anstösst und ansonsten den Thread schlafen lässt!</p>
</blockquote>
<p>Hi,</p>
<p>mir fehlt irgendwie noch Background, aber ich finde auch nichts Vernünftiges im Net, was ich noch zusätzlich studieren könnte zu diesem Thema.</p>
<p>Ich habe mir Deinen Code angeschaut, und verstehe eigentlich nur nicht, wo der Lock wieder freigegeben wird und woran ich erkenne, welches Objekt genau gelockt wird.</p>
<p>Ich habe statt deinem Thread nen Timer genommen, was ja auch ein Thread ist ( glaube ich zumindestens, bitte um Korrektur, falls diese Annahme nicht stimmt ), und lasse dort die Schleife mit den Nachrichten durchlaufen.</p>
<p>Das einzigste Problem, was ich bis dato habe, ist, dass es wahrscheinlich in einem sehr ungünstigen Fall, wenn ich gerade die Liste durchlaufe zu einem Hinzufügen an einer anderen Stelle kommt ( Ein User loggt sich ggf. gerade an einem Socket ein, ein anderer Timer wird gestartet, ... )</p>
<p>Deswegen wollte ich Deine Lösung mit dem CSingleLock ( immer dort wo ich hinzufüge und bevor die Liste durchlaufen wird. siehe oben. ) ergänzen, dazu muss ich aber die Funktionalität genau begreifen, damit ich nicht noch mehr Schaden anrichte....</p>
<p>Danke und Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1281405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1281405</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Wed, 09 May 2007 09:36:02 GMT</pubDate></item></channel></rss>