<?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[Thread Array erzeugen]]></title><description><![CDATA[<p>Hallo Leute, ich möchte ein Thread Array erstellen<br />
wie man hier in meinem Versuch sieht...</p>
<pre><code class="language-cpp">DWORD GetNumCPUs()
{
	SYSTEM_INFO m_si = {0};
	GetSystemInfo(&amp;m_si);
	return (DWORD)m_si.dwNumberOfProcessors;
}

void main()
{
	DWORD cpuam = GetNumCPUs();
	const CPUAM = cpuam;
    HANDLE  hThread[cpuam]; 

	for( int i=0; i&lt;cpuam; i++ )
	{
		DWORD dwThreadParam[i] = i;
		HANDLE hThread[i] = CreateThread (NULL,0,ThreadProc,&amp;dwThreadParam[i],0,NULL);
		SetThreadAffinityMask(hThread[i], i);
	}
...
...
...
}
</code></pre>
<p>aber leider macht da der Compiler nicht mit, warum?</p>
<p>Vielen Dank für eventuelle Hilfe.</p>
<p>rom4o <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/topic/239306/thread-array-erzeugen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Apr 2026 06:40:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/239306.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Apr 2009 20:41:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread Array erzeugen on Tue, 21 Apr 2009 20:41:53 GMT]]></title><description><![CDATA[<p>Hallo Leute, ich möchte ein Thread Array erstellen<br />
wie man hier in meinem Versuch sieht...</p>
<pre><code class="language-cpp">DWORD GetNumCPUs()
{
	SYSTEM_INFO m_si = {0};
	GetSystemInfo(&amp;m_si);
	return (DWORD)m_si.dwNumberOfProcessors;
}

void main()
{
	DWORD cpuam = GetNumCPUs();
	const CPUAM = cpuam;
    HANDLE  hThread[cpuam]; 

	for( int i=0; i&lt;cpuam; i++ )
	{
		DWORD dwThreadParam[i] = i;
		HANDLE hThread[i] = CreateThread (NULL,0,ThreadProc,&amp;dwThreadParam[i],0,NULL);
		SetThreadAffinityMask(hThread[i], i);
	}
...
...
...
}
</code></pre>
<p>aber leider macht da der Compiler nicht mit, warum?</p>
<p>Vielen Dank für eventuelle Hilfe.</p>
<p>rom4o <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/1699414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699414</guid><dc:creator><![CDATA[rom4o]]></dc:creator><pubDate>Tue, 21 Apr 2009 20:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Array erzeugen on Tue, 21 Apr 2009 22:24:30 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>1. Waere nett wennste au gleich die Fehlermeldungen mit Posten koenntest<br />
2. Kann ich jetzt nur raten und ich denk es liegt an 2 Faktoren:<br />
- die weist einer const Variable einen Wert zu<br />
- du versuchst ein Array mit einer Variable als groessen Angabe zu definiern (geht nur mit C99 komformen Kompileren !?)</p>
<p>Blessed Love C0de4Fun</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699447</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699447</guid><dc:creator><![CDATA[C0de4Fun]]></dc:creator><pubDate>Tue, 21 Apr 2009 22:24:30 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Array erzeugen on Tue, 21 Apr 2009 22:50:37 GMT]]></title><description><![CDATA[<p>Hier sind die konkreten Fehlermeldungen</p>
<p>Zeile 12 - error C2057: Konstanter Ausdruck erwartet<br />
Zeile 12 - error C2466: Reservierung eines Feldes der konstanten Groesse 0 nicht moeglich<br />
Zeile 12 - error C2133: 'hThread' : Unbekannte Groesse<br />
Zeile 16 - error C2057: Konstanter Ausdruck erwartet<br />
Zeile 16 - error C2466: Reservierung eines Feldes der konstanten Groesse 0 nicht moeglich<br />
Zeile 16 - error C2440: 'initializing' : 'int' kann nicht in 'unsigned long []' konvertiert werden<br />
Zeile 17 - error C2057: Konstanter Ausdruck erwartet<br />
Zeile 17 - error C2466: Reservierung eines Feldes der konstanten Groesse 0 nicht moeglich<br />
Zeile 17 - error C2440: 'initializing' : 'int' kann nicht in 'unsigned long []' konvertiert werden</p>
<p>Ich kann auch das ganze Programm posten wenns hilft....</p>
<p>grüße rom4o</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699452</guid><dc:creator><![CDATA[rom4o]]></dc:creator><pubDate>Tue, 21 Apr 2009 22:50:37 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Array erzeugen on Wed, 22 Apr 2009 04:14:11 GMT]]></title><description><![CDATA[<p>Wie schon gesagt wurde: du versuchst hier, bei deiner Array-Deklaration einen dynamischen, erst zur Laufzeit bekannten Wert für die Größe anzugeben. Das geht nicht (MS kennt kein C99). Da hilft auch der Umweg über eine const-Variable nicht (die übrigens bei dir gar keinen Typ hat! Du meinst wohl &quot;const int&quot;). Ein dynamisches Array musst du erzeugen, indem du mit malloc (C) oder new/new[] (C++) Speicher anforderst und ihn am Ende wieder mit free oder delete/delete[] freigibst (sonst gibt's ein Speicherleck!).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699472</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Wed, 22 Apr 2009 04:14:11 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Array erzeugen on Wed, 22 Apr 2009 15:30:39 GMT]]></title><description><![CDATA[<p>Ich hab sowas (mit BCB) gemacht, das klappt bestens!<br />
Die Threads sind eine eigene Klasse, die eine Fertigmeldung enthalten.<br />
Die Fertigmeldung wird am ende der Thraedfunktion gesetzt (Execute)</p>
<pre><code>//Funktion, die ein oder mehrere CPUs nutzt !!!
FunktionFuerEineOderMehrereCPUs()
{
  SYSTEM_INFO SystemInfo;
  DWORD PAM,SAM;
  int ActiveCPUs=0;
  int i;
  GetSystemInfo(&amp;SystemInfo);
  if (GetProcessAffinityMask(GetCurrentProcess(),&amp;PAM,&amp;SAM)!=0)
  { for (i=0;i&lt;32;i++)
    { if ((PAM &amp; (1&lt;&lt;i))!=0)
      { ActiveCPUs++;
      }
    }
  }
  if (ActiveCPUs&gt;1)
  {
//    goto NoThreads;//Zu Testzwecken, falls andere Funkt nicht geht/ nicht fertig ist
    FunktionMitMehrerenThreads(ActiveCPUs);
  }
  else
  {
NoThreads:
    //Hier &quot;normale Abarbeitung!!!

   }
}
*********************************************************************************
//Funktion für Multi- CPU- Nutzung
FunktionMitMehrerenThreads(int ActiveCPUs)
{
  TShiftThread **ShiftThreads; //Zeiger auf Array spezieller Threads &quot;ShiftThread&quot;
  Boolean AllThreadsFinished;
  DWORD ThreadRes;

  ...

        ShiftThreads=(TShiftThread**)malloc(sizeof(TShiftThread) * ThreadCount);
        if (ShiftThreads!=NULL)
        {
          memset(ShiftThreads,0,sizeof(TShiftThread) * ThreadCount);
          //Soviel Threads erzeugen/ starten, wie CPUs verfügbar
          for (i=0;i&lt;ThreadCount;i++)
          {
            ShiftThreads[i]=new TShiftThread(passende Paramater hier!!!);
            ShiftThreads[i]-&gt;Resume();
          }
          //Auf Fertigmeldung aller Threads warten
          do
          {
            AllThreadsFinished=true;
            for (i=ThreadCount - 1;i&gt;=0;i--)
            {
              ThreadRes=WaitForSingleObject((void*)(ShiftThreads[i]-&gt;Handle),10);
              if (!ShiftThreads[i]-&gt;Finished)
              { AllThreadsFinished=false;
              }
            }
          }
          while (!AllThreadsFinished);
          //Alle Threads deleten
          for (i=ThreadCount - 1;i&gt;=0;i--)
          { ShiftThreads[i]-&gt;WaitFor(); //vorsichtshalber vorgesehen
            delete ShiftThreads[i];
            ShiftThreads[i]=NULL;
          }
          //fertig !!!

          free(ShiftThreads);
        }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1699744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699744</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Wed, 22 Apr 2009 15:30:39 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Array erzeugen on Wed, 22 Apr 2009 18:19:55 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">DWORD GetNumCPUs()
{
	SYSTEM_INFO m_si = {0};
	GetSystemInfo(&amp;m_si);
	return (DWORD)m_si.dwNumberOfProcessors;
}

void main()
{
	DWORD cpuam = GetNumCPUs();
	const CPUAM = cpuam;
    HANDLE  hThread[cpuam]; 

	for( int i=0; i&lt;cpuam; i++ )
	{
		DWORD dwThreadParam[i] = i;
                // *********
                // lösch das HANDLE vor hThread[i] weg
                // *********
		HANDLE hThread[i] = CreateThread (NULL,0,ThreadProc,&amp;dwThreadParam[i],0,NULL);
		SetThreadAffinityMask(hThread[i], i);
	}
...
...
...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1699851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699851</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 22 Apr 2009 18:19:55 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Array erzeugen on Mon, 04 May 2009 17:51:20 GMT]]></title><description><![CDATA[<p>Hallo Leute, vielen Dank für die hilfreichen Hinweise.<br />
Sorry aber konnte nicht früher antworten.</p>
<p>Ich habe nun den Code wie zu sehen abgeändert:</p>
<pre><code class="language-cpp">DWORD cpuam = GetNumCPUs();
    HANDLE  *hThread;
	hThread = (HANDLE *) malloc(sizeof(HANDLE) * cpuam);

	DWORD *dwThreadParam;
	dwThreadParam = (DWORD *) malloc(sizeof(DWORD) * cpuam);

	for( int i=0; i&lt;cpuam; i++ )
	{
		dwThreadParam[i] = i;
		hThread[i] = CreateThread (NULL,0,ThreadProc,&amp;dwThreadParam[i],0,NULL);
		SetThreadAffinityMask(hThread[i], i);
	}
</code></pre>
<p>Der Compiler zeigt keine Fehler an, jedoch stürzt das Programm sofort zur Laufzeit ab.<br />
Was ist denn da noch falsch.<br />
Ich habe das so ähnlich gelöst wie in dem Code von &quot;DerAltenburger &quot;<br />
jedoch konnte ich die Klasse TShiftThread nicht verwenden.<br />
Also irgendwas stimmt leider immernoch nicht.<br />
Freu mich über jede Hilfe.</p>
<p>lg rom4o</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705491</guid><dc:creator><![CDATA[rom4o]]></dc:creator><pubDate>Mon, 04 May 2009 17:51:20 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Array erzeugen on Tue, 05 May 2009 06:33:59 GMT]]></title><description><![CDATA[<p>Das hier funktioniert bei mir tadellos:</p>
<pre><code class="language-cpp">DWORD GetNumCPUs() 
{ 
	SYSTEM_INFO m_si = {0}; 
	GetSystemInfo(&amp;m_si); 
	return (DWORD)m_si.dwNumberOfProcessors; 
}

DWORD __stdcall ThreadProc(PVOID pParam) {
	for(int i=0;i&lt;10;i++) {
		std::cout &lt;&lt; *((int*)pParam) &lt;&lt; &quot;: &quot; &lt;&lt; i &lt;&lt; std::endl;
	}
	return 0;
}

int main() {
	DWORD cpuam = GetNumCPUs(); 
	HANDLE  *hThread; 
	hThread = (HANDLE *) malloc(sizeof(HANDLE) * cpuam); 

	DWORD *dwThreadParam; 
	dwThreadParam = (DWORD *) malloc(sizeof(DWORD) * cpuam); 

	for( int i=0; i&lt;cpuam; i++ ) 
	{ 
		dwThreadParam[i] = i; 
		hThread[i] = CreateThread (NULL,0,&amp;ThreadProc,&amp;dwThreadParam[i],0,NULL); 
		SetThreadAffinityMask(hThread[i], i); 
	}
	getchar();
}
</code></pre>
<p>Da du nicht genauer beschrieben hast, wo das Programm abstürzt, schaust du am besten mal selbst, wo hier der genaue Unterschied ist. Der Debugger hilft meistens ganz gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705642</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 05 May 2009 06:33:59 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Array erzeugen on Tue, 05 May 2009 18:37:03 GMT]]></title><description><![CDATA[<p>rom4o schrieb:</p>
<blockquote>
<p>Hallo Leute, vielen Dank für die hilfreichen Hinweise.<br />
Sorry aber konnte nicht früher antworten.</p>
<p>Ich habe nun den Code wie zu sehen abgeändert:</p>
<pre><code class="language-cpp">DWORD cpuam = GetNumCPUs();
    HANDLE  *hThread;
	hThread = (HANDLE *) malloc(sizeof(HANDLE) * cpuam);

	DWORD *dwThreadParam;
	dwThreadParam = (DWORD *) malloc(sizeof(DWORD) * cpuam);

	for( int i=0; i&lt;cpuam; i++ )
	{
		dwThreadParam[i] = i;
		hThread[i] = CreateThread (NULL,0,ThreadProc,&amp;dwThreadParam[i],0,NULL);
		SetThreadAffinityMask(hThread[i], i);
	}
</code></pre>
<p>Der Compiler zeigt keine Fehler an, jedoch stürzt das Programm sofort zur Laufzeit ab.<br />
Was ist denn da noch falsch.<br />
Ich habe das so ähnlich gelöst wie in dem Code von &quot;DerAltenburger &quot;<br />
jedoch konnte ich die Klasse TShiftThread nicht verwenden.<br />
Also irgendwas stimmt leider immernoch nicht.<br />
Freu mich über jede Hilfe.</p>
<p>lg rom4o</p>
</blockquote>
<p>Ist ja klar, TShiftThread ist eine vom Borland- Thread abgeleitete eigene Klasse. Die kennt nur mein Borländer.</p>
<p>Doch das Prinzip sollte gehen.</p>
<p>ABER:<br />
das Ergebnis von malloc (für die Threads) sollte doch in Zeiger auf Zeiger gespeichert werden???<br />
Zeiger auf ein Feld von Zeigern auf die Threads.</p>
<p>Gruss<br />
Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1706075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706075</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Tue, 05 May 2009 18:37:03 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Array erzeugen on Thu, 07 May 2009 20:01:49 GMT]]></title><description><![CDATA[<p>Hallo Leute, ich habe das Problem gefunden.</p>
<p>Ich habe vergessen</p>
<pre><code class="language-cpp">for( i=0; i&lt;cpuam; i++ )
	{
	    WaitForSingleObject( hThread[i], INFINITE );
	}
</code></pre>
<p>einzubinden, dann ging es auf ein Mal perfekt.</p>
<p>Und ebenso habe ich die Handels dann geschlossen und gelöscht.</p>
<pre><code class="language-cpp">for( i=0; i&lt;cpuam; i++ )
	{
	    CloseHandle( hThread[i] );
	}

	for( i=0; i&lt;cpuam; i++ )
	{
	    TerminateThread ( hThread[i], 0 );
	}
</code></pre>
<p>Wieder einmal habt Ihr mir sehr geholfen.<br />
Vielen Dank....</p>
<p>Grüße rom4o</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707446</guid><dc:creator><![CDATA[rom4o]]></dc:creator><pubDate>Thu, 07 May 2009 20:01:49 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Array erzeugen on Thu, 07 May 2009 20:08:21 GMT]]></title><description><![CDATA[<p>TerminateThread(..) sollte nicht benutzt werden.<br />
&quot;Fahre&quot; den Thread geordnet herunter, indem Du die Thread Funktion verlässt.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707452</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Thu, 07 May 2009 20:08:21 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Array erzeugen on Wed, 13 May 2009 19:00:31 GMT]]></title><description><![CDATA[<p>Hallo, warum soll ich nicht TerminateThread(..) benutzen?<br />
Es funktioniert aber alles.<br />
Wie soll ich den Thread denn sonst schließen und die Ressourcen wieder freigeben?</p>
<p>viele Grüße</p>
<p>rom4o</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710129</guid><dc:creator><![CDATA[rom4o]]></dc:creator><pubDate>Wed, 13 May 2009 19:00:31 GMT</pubDate></item><item><title><![CDATA[Reply to Thread Array erzeugen on Wed, 13 May 2009 20:34:05 GMT]]></title><description><![CDATA[<p>Signalisiere dem Thread, dass er sich beenden soll...</p>
<p>Bzgl. Warum nicht TerminateThread:<br />
<a href="http://blog.kalmbachnet.de/?postid=6" rel="nofollow">http://blog.kalmbachnet.de/?postid=6</a><br />
<a href="http://blog.kalmbachnet.de/?postid=16" rel="nofollow">http://blog.kalmbachnet.de/?postid=16</a><br />
<a href="http://blog.kalmbachnet.de/?postid=17" rel="nofollow">http://blog.kalmbachnet.de/?postid=17</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1710166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1710166</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Wed, 13 May 2009 20:34:05 GMT</pubDate></item></channel></rss>