<?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[Threads : Probleme mit der Parameterübegabe]]></title><description><![CDATA[<p>hallo leute,</p>
<p>ich habe gerade ein wenig mit threads rumgespielt und wollte 2 davon in einer schleife erstellen. zuerst mal der code:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;windows.h&gt;
#define SLEEP 1000

DWORD WINAPI switch_func(LPVOID i);
void status_thread_1(void);
void status_thread_2(void);

int main()
{
    HANDLE hThread[2];
    DWORD ThreadID[2];
    int i;

    for(i=0; i&lt;2; ++i)
         if((hThread[i]=CreateThread(0, 0, switch_func, &amp;i, 0, &amp;ThreadID[i]))==0)
              return 1;

    WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
    for(i=0; i&lt;2; ++i)
        CloseHandle(hThread[i]);

    system(&quot;pause&quot;);
    return 0;
};

DWORD WINAPI switch_func(LPVOID i)
{
	 int* a=(int*) i;//der cast is unschön aber der compiler hats anders nicht geschluckt.
	 printf(&quot;%d\n&quot;, *a);//wird zur kontrolle ausgegeben
	 if(*a==0)
        status_thread_1();
     else
        status_thread_2();
	 return 1;
}

void status_thread_1()
{
     printf(&quot;Thread 1 laeuft...\n&quot;);
     Sleep(SLEEP);
     printf(&quot;Thread 1 beendet!\n&quot;);
}

void status_thread_2()
{
     printf(&quot;Thread 2 laeuft...\n&quot;);
     Sleep(SLEEP);
     printf(&quot;Thread 2 beendet!\n&quot;);
}
</code></pre>
<p>ich übergebe immer die gleiche funktion, die dann, je nach parameter (parameter ist die adresse der zählervariablen), eine andere funktion aufruft, die eigentliche threadfunktion. ist sowas überhapt sinnvoll oder gibts noch ne andere möglichkeit, threads mit unterschiedlichen aufgaben in einer schleife zu erstellen?<br />
soweit geht auch alles aber am ende der ersten schleife ist der wert der variablen i immer 2 und so wird immer zu status_thread_2 gesprungen. warum wird die funktion nicht schon beim erstellen des threads aufgerufen sondern erst dannach?<br />
dann hab ichs mit einer globalen variable versucht, die in der ersten schleife erhöht wird. Es wird wieder wird nur die 2te funktion aufgerufen. dann hab ich die variable mal in switch_func inkrementiert, jetzt wird 2 mal die erste funktion aufgerufen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Was mach ich da falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183369/threads-probleme-mit-der-parameterübegabe</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 05:06:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183369.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 04 Jun 2007 12:13:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Threads : Probleme mit der Parameterübegabe on Mon, 04 Jun 2007 12:13:59 GMT]]></title><description><![CDATA[<p>hallo leute,</p>
<p>ich habe gerade ein wenig mit threads rumgespielt und wollte 2 davon in einer schleife erstellen. zuerst mal der code:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;windows.h&gt;
#define SLEEP 1000

DWORD WINAPI switch_func(LPVOID i);
void status_thread_1(void);
void status_thread_2(void);

int main()
{
    HANDLE hThread[2];
    DWORD ThreadID[2];
    int i;

    for(i=0; i&lt;2; ++i)
         if((hThread[i]=CreateThread(0, 0, switch_func, &amp;i, 0, &amp;ThreadID[i]))==0)
              return 1;

    WaitForMultipleObjects(2, hThread, TRUE, INFINITE);
    for(i=0; i&lt;2; ++i)
        CloseHandle(hThread[i]);

    system(&quot;pause&quot;);
    return 0;
};

DWORD WINAPI switch_func(LPVOID i)
{
	 int* a=(int*) i;//der cast is unschön aber der compiler hats anders nicht geschluckt.
	 printf(&quot;%d\n&quot;, *a);//wird zur kontrolle ausgegeben
	 if(*a==0)
        status_thread_1();
     else
        status_thread_2();
	 return 1;
}

void status_thread_1()
{
     printf(&quot;Thread 1 laeuft...\n&quot;);
     Sleep(SLEEP);
     printf(&quot;Thread 1 beendet!\n&quot;);
}

void status_thread_2()
{
     printf(&quot;Thread 2 laeuft...\n&quot;);
     Sleep(SLEEP);
     printf(&quot;Thread 2 beendet!\n&quot;);
}
</code></pre>
<p>ich übergebe immer die gleiche funktion, die dann, je nach parameter (parameter ist die adresse der zählervariablen), eine andere funktion aufruft, die eigentliche threadfunktion. ist sowas überhapt sinnvoll oder gibts noch ne andere möglichkeit, threads mit unterschiedlichen aufgaben in einer schleife zu erstellen?<br />
soweit geht auch alles aber am ende der ersten schleife ist der wert der variablen i immer 2 und so wird immer zu status_thread_2 gesprungen. warum wird die funktion nicht schon beim erstellen des threads aufgerufen sondern erst dannach?<br />
dann hab ichs mit einer globalen variable versucht, die in der ersten schleife erhöht wird. Es wird wieder wird nur die 2te funktion aufgerufen. dann hab ich die variable mal in switch_func inkrementiert, jetzt wird 2 mal die erste funktion aufgerufen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Was mach ich da falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298440</guid><dc:creator><![CDATA[rudi++]]></dc:creator><pubDate>Mon, 04 Jun 2007 12:13:59 GMT</pubDate></item><item><title><![CDATA[Reply to Threads : Probleme mit der Parameterübegabe on Mon, 04 Jun 2007 12:23:55 GMT]]></title><description><![CDATA[<p>tausch mal die entsprechenden zeilen in deinem code gegen diese...</p>
<pre><code>...
         if((hThread[i]=CreateThread(0, 0, switch_func, (void*)i, 0, &amp;ThreadID[i]))==0)
...
...
     int a=(int) i;//der cast is unschön aber der compiler hats anders nicht geschluckt.
     printf(&quot;%d\n&quot;, a);//wird zur kontrolle ausgegeben
     if(a==0)
...
</code></pre>
<p><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/1298456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298456</guid><dc:creator><![CDATA[pale dog]]></dc:creator><pubDate>Mon, 04 Jun 2007 12:23:55 GMT</pubDate></item><item><title><![CDATA[Reply to Threads : Probleme mit der Parameterübegabe on Mon, 04 Jun 2007 15:13:43 GMT]]></title><description><![CDATA[<p>@ pale dog: ok vielen dank, klappt perfekt! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298644</guid><dc:creator><![CDATA[rudi++]]></dc:creator><pubDate>Mon, 04 Jun 2007 15:13:43 GMT</pubDate></item><item><title><![CDATA[Reply to Threads : Probleme mit der Parameterübegabe on Mon, 04 Jun 2007 16:16:41 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-14811.html" rel="nofollow">Tim</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-10.html" rel="nofollow">ANSI C</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-4.html" rel="nofollow">WinAPI</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298707</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298707</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Mon, 04 Jun 2007 16:16:41 GMT</pubDate></item></channel></rss>