<?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[Wie mehrere Worker-Threads verwalten?]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe in meinem Programm mehrere Aufgaben zu erledigen. In den Beispielen im Netz wird einfach für jede Aufgabe ein Thread gemacht und fertig. Ich habe sehr viele Aufgaben und will 10 WorkerThreads laufen lassen.<br />
In einem älteren Porgramm für Linux habe ich es so gelöst:</p>
<pre><code class="language-cpp">thread_count = 0;   //wieviele Threads momentan laufen
    pthread_t threads[proxylist.size()];

    int i;
    for(i = 0; i &lt; proxylist.size(); i++)
    {
        while(true)
        {
            //neuen Thread starten, wenn Maximum nicht erreicht
            if(thread_count &lt; _NUMTHREADS)
            {
                proxylist[i].id = i;
                pthread_create(&amp;threads[i], NULL, checkProxy, &amp;proxylist[i]);
                break;
            }
            else
            {
                sleep(1);
            }
        }
    }
    // Auf das Ende aller Threads warten
    for(i = 0; i &lt; proxylist.size(); i++)
    {
        pthread_join(threads[i], NULL);
    }
</code></pre>
<p>Das hätte ich jetzt bei dem Windows-Programm ähnlich gemacht aber es hängt schon bei</p>
<pre><code class="language-cpp">pthread_t threads[proxylist.size()];
</code></pre>
<p>bzw. unter Windows</p>
<pre><code class="language-cpp">HANDLE hThread[proxylist.size()];
</code></pre>
<p>- das funktioniert im Visual Studio nämlich nciht, weil er als Array-Größe eine Konstante haben will.<br />
Ich brauche ja auch eigentlich nur ein Array von der Größe der Thread-Anzahl aber ich weiß ja nicht, welches Element aus dem Array, also welcher Thread, frei geworden ist und mit einem neuen Thread belegt werden kann.</p>
<p>Hat jemand vielleicht einen Tipp, wie man sowas am besten regelt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/138880/wie-mehrere-worker-threads-verwalten</link><generator>RSS for Node</generator><lastBuildDate>Mon, 13 Jul 2026 05:35:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/138880.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Mar 2006 06:41:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie mehrere Worker-Threads verwalten? on Thu, 02 Mar 2006 06:42:31 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich habe in meinem Programm mehrere Aufgaben zu erledigen. In den Beispielen im Netz wird einfach für jede Aufgabe ein Thread gemacht und fertig. Ich habe sehr viele Aufgaben und will 10 WorkerThreads laufen lassen.<br />
In einem älteren Porgramm für Linux habe ich es so gelöst:</p>
<pre><code class="language-cpp">thread_count = 0;   //wieviele Threads momentan laufen
    pthread_t threads[proxylist.size()];

    int i;
    for(i = 0; i &lt; proxylist.size(); i++)
    {
        while(true)
        {
            //neuen Thread starten, wenn Maximum nicht erreicht
            if(thread_count &lt; _NUMTHREADS)
            {
                proxylist[i].id = i;
                pthread_create(&amp;threads[i], NULL, checkProxy, &amp;proxylist[i]);
                break;
            }
            else
            {
                sleep(1);
            }
        }
    }
    // Auf das Ende aller Threads warten
    for(i = 0; i &lt; proxylist.size(); i++)
    {
        pthread_join(threads[i], NULL);
    }
</code></pre>
<p>Das hätte ich jetzt bei dem Windows-Programm ähnlich gemacht aber es hängt schon bei</p>
<pre><code class="language-cpp">pthread_t threads[proxylist.size()];
</code></pre>
<p>bzw. unter Windows</p>
<pre><code class="language-cpp">HANDLE hThread[proxylist.size()];
</code></pre>
<p>- das funktioniert im Visual Studio nämlich nciht, weil er als Array-Größe eine Konstante haben will.<br />
Ich brauche ja auch eigentlich nur ein Array von der Größe der Thread-Anzahl aber ich weiß ja nicht, welches Element aus dem Array, also welcher Thread, frei geworden ist und mit einem neuen Thread belegt werden kann.</p>
<p>Hat jemand vielleicht einen Tipp, wie man sowas am besten regelt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1006368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006368</guid><dc:creator><![CDATA[poncho]]></dc:creator><pubDate>Thu, 02 Mar 2006 06:42:31 GMT</pubDate></item><item><title><![CDATA[Reply to Wie mehrere Worker-Threads verwalten? on Thu, 02 Mar 2006 07:45:45 GMT]]></title><description><![CDATA[<p>Ja, nimm einen STL-Container (z.B. vector) dafür:</p>
<pre><code class="language-cpp">std::vector&lt;HANDLE&gt; hThread(proxylist.size());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1006397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006397</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 02 Mar 2006 07:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to Wie mehrere Worker-Threads verwalten? on Thu, 02 Mar 2006 08:40:37 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Ja, nimm einen STL-Container (z.B. vector) dafür:</p>
<pre><code class="language-cpp">std::vector&lt;HANDLE&gt; hThread(proxylist.size());
</code></pre>
</blockquote>
<p>Stimmt aber gibt es da nicht auch ein Resourcensparendere Methode? Schließlich braucht man ja immer nur so viele Elemente wie maximal Threads vorhanden sind.</p>
<p>Ich hatte jetzt so eine Idee:<br />
Beim Start werden MAXTHREADS gestartet und im ThreadProc kommt am Ende ein PostMessage oder PostThreadMessage an den MainThread. Und beim z.B. WM_USER_THREADEND wird dann für jeden fertigen Thread ein neuer gestartet bis alle Aufgaben durch sind. So könnte ich mir die Thread-Handles sogar ganz sparen.<br />
Was meint der Fachmann dazu? <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/1006455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006455</guid><dc:creator><![CDATA[poncho]]></dc:creator><pubDate>Thu, 02 Mar 2006 08:40:37 GMT</pubDate></item><item><title><![CDATA[Reply to Wie mehrere Worker-Threads verwalten? on Thu, 02 Mar 2006 09:22:42 GMT]]></title><description><![CDATA[<p>Hab es jetzt so gemacht:</p>
<pre><code class="language-cpp">// Start
for(plpos = 0; plpos &lt; NUMTHREADS &amp;&amp; plpos &lt; proxylist.size(); plpos++)
{
	CreateThread(NULL, 0, ThreadProc, &amp;proxylist.at(plpos), 0, NULL);
}

//Ein Thread ist fertig
case WM_USER_THREADEND:
	if(plpos &lt; proxylist.size())
	{
		CreateThread(NULL, 0, ThreadProc, &amp;proxylist.at(plpos), 0, NULL);
		plpos++;
	}

//ThreadProc
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
	PROXY* proxy = (PROXY*)lpParam;
	//...
	PostMessage(hwndDialog, WM_USER_THREADEND, 0, 0);
	return 0;
}
</code></pre>
<p>Und es funktioniert <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/1006507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006507</guid><dc:creator><![CDATA[poncho]]></dc:creator><pubDate>Thu, 02 Mar 2006 09:22:42 GMT</pubDate></item><item><title><![CDATA[Reply to Wie mehrere Worker-Threads verwalten? on Thu, 02 Mar 2006 09:37:32 GMT]]></title><description><![CDATA[<p>poncho schrieb:</p>
<blockquote>
<p>CStoll schrieb:</p>
<blockquote>
<p>Ja, nimm einen STL-Container (z.B. vector) dafür:</p>
<pre><code class="language-cpp">std::vector&lt;HANDLE&gt; hThread(proxylist.size());
</code></pre>
</blockquote>
<p>Stimmt aber gibt es da nicht auch ein Resourcensparendere Methode? Schließlich braucht man ja immer nur so viele Elemente wie maximal Threads vorhanden sind.</p>
</blockquote>
<p>Klar geht das - du kannst auch mit einem leeren vector beginnen und jedes mal, wenn du einen neuen Thread startest, den zugehörigen HANDLE per push_back() einfügen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1006527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006527</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 02 Mar 2006 09:37:32 GMT</pubDate></item></channel></rss>