<?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[srand in einer klasse benutzen]]></title><description><![CDATA[<p>hallo!</p>
<p>ich habe eine klasse die mir zufallszahlen erzeugt. aber wo rufe ich denn srand auf damit es nicht 2 mal aufgerufen wird?? wenn ich es im konstruktor aufrufe und 2 instanzen der klasse erzeuge wird auch srand 2x aufgerufen. und das darf ja nicht passieren so wie ich das einigen beiträgen aus dem forum entnehme. ich hab über die board-such dann auch noch folgendes gefunden:</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic.php?t=59993&amp;postdays=0&amp;postorder=asc&amp;highlight=srand+class&amp;start=10" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic.php?t=59993&amp;postdays=0&amp;postorder=asc&amp;highlight=srand+class&amp;start=10</a><br />
(den letzten beitrag von walli mein ich)</p>
<p>aber auch das funktioniert nicht.<br />
wie kann ich denn jetzt srand für alle instanzen der klasse nur genau EIN mal aufrufen??? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> edit: oh hab mich im forum vertan. wollte eigentlich ins c++ forum. irgendwie verpeilt. sorry!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/99441/srand-in-einer-klasse-benutzen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 17:38:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/99441.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 28 Jan 2005 11:55:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to srand in einer klasse benutzen on Fri, 28 Jan 2005 11:57:13 GMT]]></title><description><![CDATA[<p>hallo!</p>
<p>ich habe eine klasse die mir zufallszahlen erzeugt. aber wo rufe ich denn srand auf damit es nicht 2 mal aufgerufen wird?? wenn ich es im konstruktor aufrufe und 2 instanzen der klasse erzeuge wird auch srand 2x aufgerufen. und das darf ja nicht passieren so wie ich das einigen beiträgen aus dem forum entnehme. ich hab über die board-such dann auch noch folgendes gefunden:</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic.php?t=59993&amp;postdays=0&amp;postorder=asc&amp;highlight=srand+class&amp;start=10" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic.php?t=59993&amp;postdays=0&amp;postorder=asc&amp;highlight=srand+class&amp;start=10</a><br />
(den letzten beitrag von walli mein ich)</p>
<p>aber auch das funktioniert nicht.<br />
wie kann ich denn jetzt srand für alle instanzen der klasse nur genau EIN mal aufrufen??? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> edit: oh hab mich im forum vertan. wollte eigentlich ins c++ forum. irgendwie verpeilt. sorry!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708662</guid><dc:creator><![CDATA[sn0b]]></dc:creator><pubDate>Fri, 28 Jan 2005 11:57:13 GMT</pubDate></item><item><title><![CDATA[Reply to srand in einer klasse benutzen on Fri, 28 Jan 2005 12:07:05 GMT]]></title><description><![CDATA[<p>die static var im ctor regelt doch das <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>
<pre><code class="language-cpp">static bool seed = false; 
if(!seed)
{
   srand(static_cast&lt;unsigned&gt;(time(0)));
   seed = true;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/708671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708671</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Fri, 28 Jan 2005 12:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to srand in einer klasse benutzen on Fri, 28 Jan 2005 12:12:20 GMT]]></title><description><![CDATA[<p>ja. das hab ich auch so übernommen. aber es geht nicht. aber ich hab vielleicht vergessen zu sagen das die klasse ein thread ist. hängt das vielleicht damit zusammen??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708675</guid><dc:creator><![CDATA[sn0b]]></dc:creator><pubDate>Fri, 28 Jan 2005 12:12:20 GMT</pubDate></item><item><title><![CDATA[Reply to srand in einer klasse benutzen on Fri, 28 Jan 2005 13:22:05 GMT]]></title><description><![CDATA[<p>sn0b schrieb:</p>
<blockquote>
<p>aber ich hab vielleicht vergessen zu sagen das die klasse ein thread ist.</p>
</blockquote>
<p>Wie kann eine Klasse ein Thread sein <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>
]]></description><link>https://www.c-plusplus.net/forum/post/708780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708780</guid><dc:creator><![CDATA[flenders]]></dc:creator><pubDate>Fri, 28 Jan 2005 13:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to srand in einer klasse benutzen on Fri, 28 Jan 2005 13:26:25 GMT]]></title><description><![CDATA[<p>flenders schrieb:</p>
<blockquote>
<p>sn0b schrieb:</p>
<blockquote>
<p>aber ich hab vielleicht vergessen zu sagen das die klasse ein thread ist.</p>
</blockquote>
<p>Wie kann eine Klasse ein Thread sein <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>
</blockquote>
<p>gute frage <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>meinst du vielleicht jeder thread erstellt ein objekt? das geht nicht, da ja threads eigene speicherbereiche haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/708789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708789</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Fri, 28 Jan 2005 13:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to srand in einer klasse benutzen on Fri, 28 Jan 2005 14:47:28 GMT]]></title><description><![CDATA[<p>also ich poste euch jetzt mal meinen code. nicht wundern wenn das proggy sinnlose erscheint, es ist nur vorarbeit für ein anderes projekt.</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;time.h&gt;
#include &lt;process.h&gt;
#include &lt;windows.h&gt;

class Zufall {

    private:
        std::string zahl;
        int threadid;
        int pos;

    public:
        HANDLE h;
        bool laufe;

        Zufall(int tid) {
            this-&gt;threadid=tid;
            laufe=true;

            // Nur einmal seed für alle Instanzen
            static bool randinitalisiert=false;
            if(!randinitalisiert) {
                srand(time(NULL));
                randinitalisiert=true;
            }
        }
        virtual ~Zufall() {
            BeendeThread(); // Thread muß beendet sein, BEVOR ...
            CloseHandle(h);
        }

        /* Thread starten. */
        void Starte() {
            h=(HANDLE)_beginthreadex(0,0,StarteThread,this,0,0);
        }
        /* Thread beenden. */
        virtual void Beende() {
            laufe=false;
            // Warten das Thread beendet ist:
            if (!WaitForSingleObject(h, 10000)==ERROR_SUCCESS)
                BeendeThread();
        }
        /* Beende Thread wirklich. */
        virtual void BeendeThread() {
            // Warten das Thread beendet ist:
            WaitForSingleObject(h, 10000);
            if (!TerminateThread(h, 0)) {
                return;
            }
        }

        virtual unsigned Run() {
            printf(&quot;*** Zufall %d: Generiere...\n&quot;,threadid);
            while (laufe) {
                while (true) {
                    Sleep(2000);
                    GeneriereZahl();
                    printf(&quot;*** Zufall %d: Zahl: %s\n&quot;,threadid,zahl.c_str());

                    if ( ((pos=zahl.find(&quot;100&quot;))&gt;-1) || ((pos=zahl.find(&quot;200&quot;))&gt;-1) ) {
                        printf(&quot;*** Zufall %d: Eine passende Zahl wurde gefunden!\n&quot;,threadid);
                        break;
                    }
                }
            }
        }

    private:
        void GeneriereZahl() {
            zahl=&quot;&quot;;
            int r;
            char tmp[3];
//srand(time(NULL));
            r=rand()%300+1;
            itoa(r,tmp,10);
            zahl.append(tmp); zahl.append(&quot;-&quot;);
            for (int i=0; i&lt;2; i++) {
                r=rand()%300+1;
                itoa(r,tmp,10);
                zahl.append(tmp); zahl.append(&quot;-&quot;);
            }
            r=rand()%300+1;
            itoa(r,tmp,10);
            zahl.append(tmp);
        }

    protected:
        static unsigned CALLBACK StarteThread(PVOID threadParam) {
            Zufall * instance = (Zufall *) threadParam;
            return instance-&gt;Run();
        }
};

int main() {
    Zufall z1(1);
    z1.Starte();
    Zufall z2(2);
    z2.Starte();

    while (true) { }
}
</code></pre>
<p>edit: habe den source etwas vereinfacht, damit er leichter zu sichten ist. <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>also problem ist folgendes:<br />
1. wenn ich srand im konstruktor und nicht in der methode GeneriereZahl() initialisiere liefert er immer(!) die gleichen zufalls zahlen:<br />
1.Durchlauf:</p>
<blockquote>
<p>*** Zufall 1: Generiere...<br />
*** Zufall 2: Generiere...<br />
*** Zufall 1: Zahl: 42-168-35-101<br />
*** Zufall 2: Zahl: 42-168-35-101<br />
*** Zufall 1: Zahl: 270-125-79-259<br />
*** Zufall 2: Zahl: 270-125-79-259<br />
*** Zufall 1: Zahl: 263-165-6-246<br />
*** Zufall 2: Zahl: 263-165-6-246</p>
</blockquote>
<p>2.Durchlauf:</p>
<blockquote>
<p>*** Zufall 1: Generiere...<br />
*** Zufall 2: Generiere...<br />
*** Zufall 1: Zahl: 42-168-35-101<br />
*** Zufall 2: Zahl: 42-168-35-101<br />
*** Zufall 1: Zahl: 270-125-79-259<br />
*** Zufall 2: Zahl: 270-125-79-259<br />
*** Zufall 1: Zahl: 263-165-6-246<br />
*** Zufall 2: Zahl: 263-165-6-246</p>
</blockquote>
<p>X.Durchlauf: s.o.<br />
ich habe aber hier und auf anderen websites gelesen, das srand nur einmal initalisiert werden darf, damit eben genau dies nicht passiert... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
2. egal wo ich srand nun initalisiere, die &quot;zufallszahlen&quot; sind bei beiden threads immer gleich...</p>
<p>was mache ich falsch??? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/708821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/708821</guid><dc:creator><![CDATA[sn0b]]></dc:creator><pubDate>Fri, 28 Jan 2005 14:47:28 GMT</pubDate></item><item><title><![CDATA[Reply to srand in einer klasse benutzen on Fri, 28 Jan 2005 19:48:31 GMT]]></title><description><![CDATA[<p>holla!</p>
<p>anscheinend hat keiner bock den ganzen quelltext durchzukauen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> muß ja auch keiner. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> wäre nur für tips dankbar. z.b. ob das am multithreading liegen könnte.<br />
ich hab google und die board-suche gequält und dabei außer dem oben erwähnten irgendwie nix sinnvolles gefunden. und das funzt ja nicht so wies soll. bitte helft mir! <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/709149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/709149</guid><dc:creator><![CDATA[sn0b]]></dc:creator><pubDate>Fri, 28 Jan 2005 19:48:31 GMT</pubDate></item><item><title><![CDATA[Reply to srand in einer klasse benutzen on Fri, 28 Jan 2005 20:27:24 GMT]]></title><description><![CDATA[<p>Du linkst aber schon gegen die Multithreaded-Version der Standard-lib? (in den Compiler/linker-Einstellungen).</p>
<p>Es gibt IMHO nur zwei Möglichkeiten: Entweder ist die statische Variable, die rand() benutzt, thread-lokal oder nicht.</p>
<p>Wenn sie es nicht ist, langt ganz offensichtlich ein srand()-Aufruf am Programmanfang.<br />
Wenn sie es ist, langt nicht mehr einer (hab das aber nicht getestet). Denn beim Erstellen des Threads müsste der aktuelle srand-Wert vom neuen Thread übernommen werden. Damit hätten beide Threads denselben seed und erzeugen dann auch exakt die gleichen &quot;Zufallszahlen&quot;. Du müsstest dann also am Beginn jeder Thread-Funktion srand aufrufen, allerdings nicht mit time() als Paramter. Wenn du zwei Threads innerhalb einer Sekunde erstellst, würden sie sonst denselben seed-Wert bekommen.<br />
Du könntest für srand z.B. eine Zahl nehmen, die du vorher mit rand() erzeugt hast.</p>
<p>Ob srand für jeden Thread aufgerufen werden muss oder nicht müsste eigentlich in der Dokumentation deines Compilers stehen (das ist nämlich AFAIK nicht vom Standard abgedeckt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/709188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/709188</guid><dc:creator><![CDATA[Christoph]]></dc:creator><pubDate>Fri, 28 Jan 2005 20:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to srand in einer klasse benutzen on Fri, 28 Jan 2005 21:00:48 GMT]]></title><description><![CDATA[<p>ui! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> das hört sich aber kompliziert an... naja ich such jetzt erstmal die doku zu meinem dev-c++...<br />
erstmal vielen dank, auch wenn ich das gefühl hab das ich mich nochmal dazu melden werde <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/709214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/709214</guid><dc:creator><![CDATA[sn0b]]></dc:creator><pubDate>Fri, 28 Jan 2005 21:00:48 GMT</pubDate></item></channel></rss>