<?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 erzeugen.]]></title><description><![CDATA[<p>Hallo.<br />
Ich habe folegendes Problem. Ich habe eine Klassenhierachie, bestehend aus verschiedenen Klassen ( Klasse A, Klasse B usw). Nun möchte ich eine neue Intanz einer KLasse erzeugen. Das klappt auch ganz gut. Diese Klasse (Konstruktor) führt dabei gleich mehrere Sachen aus. Ich mächte nun sehr viele Instanzen dieser Klasse erzeugen und sie parallel abarbeiten lassen.<br />
Dazu habe ich mir überlegt jede Instanz in einem Thread laufen zu lassen.<br />
Der Aufruf der Instanz erfolgt bisher so.</p>
<pre><code class="language-cpp">cMatch *match = new cMatch(liga-&gt;Get_Ansetzungen(spieltag)[spiele]);
</code></pre>
<p>Ich habe mich bereits etwas beslen und weiß das die Funktion zum Aufrufen eines Threads als static deklariert werden muss. Allerdings bekomme ich immer einen Fehler wenn ich versuche den Konstruktor als static zu deklarieren.<br />
Ich hoffe meine Erklärungen waren ausführlich genug. Kann mir jemand helfen. Ich möchte keinen fertigen Quellcode ( ich weiß dafür sind die Erklärungen zu ungenau. Sonder nur einen Hinweis wie man vorgehen muss)<br />
Vielen Dank für eure Bemühungen</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/223088/thread-erzeugen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 22:08:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/223088.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Sep 2008 07:17:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Thread erzeugen. on Mon, 22 Sep 2008 07:17:47 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich habe folegendes Problem. Ich habe eine Klassenhierachie, bestehend aus verschiedenen Klassen ( Klasse A, Klasse B usw). Nun möchte ich eine neue Intanz einer KLasse erzeugen. Das klappt auch ganz gut. Diese Klasse (Konstruktor) führt dabei gleich mehrere Sachen aus. Ich mächte nun sehr viele Instanzen dieser Klasse erzeugen und sie parallel abarbeiten lassen.<br />
Dazu habe ich mir überlegt jede Instanz in einem Thread laufen zu lassen.<br />
Der Aufruf der Instanz erfolgt bisher so.</p>
<pre><code class="language-cpp">cMatch *match = new cMatch(liga-&gt;Get_Ansetzungen(spieltag)[spiele]);
</code></pre>
<p>Ich habe mich bereits etwas beslen und weiß das die Funktion zum Aufrufen eines Threads als static deklariert werden muss. Allerdings bekomme ich immer einen Fehler wenn ich versuche den Konstruktor als static zu deklarieren.<br />
Ich hoffe meine Erklärungen waren ausführlich genug. Kann mir jemand helfen. Ich möchte keinen fertigen Quellcode ( ich weiß dafür sind die Erklärungen zu ungenau. Sonder nur einen Hinweis wie man vorgehen muss)<br />
Vielen Dank für eure Bemühungen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1585806</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585806</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Mon, 22 Sep 2008 07:17:47 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Mon, 22 Sep 2008 07:35:29 GMT]]></title><description><![CDATA[<p>Der Konstruktor ist die Methode, die zum Initialisieren einer INSTANZ dient. static heißt aber, dass du auf die Methode ohne jegliche Instanziierung zugreifen kannst. Beides beißt sich. erstelle eine statische Methode, die eine Instanz erzeugt und zurück liefert. Die kannst du dann threaden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1585817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585817</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Mon, 22 Sep 2008 07:35:29 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Mon, 22 Sep 2008 07:47:20 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Vielen Dank für deinen Tipp. WErde ihn gelcih ausprobieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1585824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585824</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Mon, 22 Sep 2008 07:47:20 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Mon, 22 Sep 2008 08:21:51 GMT]]></title><description><![CDATA[<p>Die meisten Thread-APIs erwarten einen Funktionszeiger mit einer bestimmten Signatur. Diese Signatur beinhalten eigentlich so gut wie immer einen void* als Parameter, um beliebige Inhalten in die ausgelagerte Funktion hinbekommen zu können. Hier kann man einen this-Pointer übergeben, und den dann in der Threadfunktion in den passenden Klassenpointer zurückcasten.<br />
Das ermöglicht Dir, innerhalb der statischen Methode mit Instanzen zu arbeiten.</p>
<p>Beispiel:</p>
<pre><code class="language-cpp">//CreateThread soll so aussehen (ist nur ein Beispiel)
//typedef void(*runProc)(void*)
//void CreateThread(runProc proc, void* param);

class ThreadableClass
{
public:
	ThreadableClass()
	{
		CreateThread(run, this);
	}

	void doSomething()
	{
		//...
	}
private:
	static void run(void* param)
	{
		ThreadableClass* instance = reinterpret_cast&lt;ThreadableClass*&gt;(parem);
		//...
		instance-&gt;doSomething();
	}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1585838</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1585838</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 22 Sep 2008 08:21:51 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Wed, 24 Sep 2008 07:50:08 GMT]]></title><description><![CDATA[<p>Hallo.<br />
ICh habe eure Tipps umgesetzt und kann nun eine Thread erzeugen. Allerdings würde ich nun gerne eine Funktion einer Klasse als Thread - Funktion benutzen.</p>
<p>Allerdings bekomme ich da immer einene Fehler :</p>
<pre><code class="language-cpp">error C2664: 'CreateThread' : cannot convert parameter 3 from 'void (void *)' to 'unsigned long (__stdcall *)(void *)'
        None of the functions with this name in scope match the target type
</code></pre>
<p>Der Aufruf der folgt so :</p>
<pre><code class="language-cpp">HANDLE hThread[1];
	hThread[0] = CreateThread(NULL,0,test_thread,NULL,0,NULL);
	WaitForMultipleObjects(1,hThread, true,INFINITE);
</code></pre>
<p>UNd die Definition ist :</p>
<pre><code class="language-cpp">class cVolleyballTrainer
{
public:

	cVolleyballTrainer(string odbc);
	void Neues_Spiel();

private:
	static void test_thread(LPVOID pr)
	{
		cout&lt;&lt;&quot;TEST!!!!!!&quot;;
	}
	//static DWORD test(void* pr);
};
</code></pre>
<p>Ich hoffe ihr könnt mir helfen .<br />
Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587011</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Wed, 24 Sep 2008 07:50:08 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Wed, 24 Sep 2008 07:58:08 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">static DWORD test_thread(LPVOID pr)
{
//...
}
</code></pre>
<p>nicht</p>
<pre><code class="language-cpp">static void test_thread(LPVOID pr)
{
//...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1587020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587020</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 24 Sep 2008 07:58:08 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Wed, 24 Sep 2008 08:06:48 GMT]]></title><description><![CDATA[<p>Vielen Dank für deine Antwort. Aber dsa Fehlerbild ist das gleiche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587030</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587030</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Wed, 24 Sep 2008 08:06:48 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Wed, 24 Sep 2008 08:08:49 GMT]]></title><description><![CDATA[<p>Probier mal:</p>
<pre><code class="language-cpp">static DWORD WINAPI test_thread(PVOID pr)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1587032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587032</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 24 Sep 2008 08:08:49 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Wed, 24 Sep 2008 08:16:15 GMT]]></title><description><![CDATA[<p>Klasse . Das wars, vielen Dank,</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587039</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Wed, 24 Sep 2008 08:16:15 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Wed, 24 Sep 2008 09:02:56 GMT]]></title><description><![CDATA[<p>Okay nach dem ich nun die FUnktion als thread aufrufen kann möchte ich auch auf die Klassen variblen zugreifen. Wie geht das ?</p>
<p>Hier noch mal der Aufruf :</p>
<pre><code class="language-cpp">HANDLE hThread[10];
	int a = 10;
	hThread[0] = CreateThread(NULL,0,test_thread,(void*)a,0,NULL);
	WaitForMultipleObjects(1,hThread, true,INFINITE);
</code></pre>
<p>Und die Definition :</p>
<pre><code class="language-cpp">class cVolleyballTrainer
{
public:

	cVolleyballTrainer(string odbc);
	void Neues_Spiel();

private:
	static DWORD WINAPI test_thread(LPVOID pr);

	cLiga *liga;
};
</code></pre>
<p>Und ich will jetzt auf</p>
<pre><code class="language-cpp">liga
</code></pre>
<p>zugreifen in meiner Threadfunktion . Wie gth das ??</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587078</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Wed, 24 Sep 2008 09:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Wed, 24 Sep 2008 09:13:04 GMT]]></title><description><![CDATA[<p>Habe ich oben beschrieben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587089</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 24 Sep 2008 09:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Wed, 24 Sep 2008 09:20:12 GMT]]></title><description><![CDATA[<p>Okay. Ich habe mir deinen Beitrag noch einmal angesehen. Aber wenn ich das richtig sehe übergibts du der Funktion ja einen Paramter. Ich möchte aber ohne Paraterübergabe auf eine Variable zugriefen.</p>
<p>Ist das überhaupt möglic ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587100</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587100</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Wed, 24 Sep 2008 09:20:12 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Wed, 24 Sep 2008 10:05:21 GMT]]></title><description><![CDATA[<p>Nein, Deine Thread-Methode ist statisch, das heisst, sie ist von konkreten Objekt-Instanzen unabhängig.<br />
Um Zugriff darauf zu bekommen, musst Du einen this-Pointer übergeben.<br />
Btw. übergibst Du im Moment ja auch einen Parameter (int a).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587142</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 24 Sep 2008 10:05:21 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Wed, 24 Sep 2008 11:33:36 GMT]]></title><description><![CDATA[<p>Sofern Du die MS -CRT verwendest, solltest Du nicht CreateThread nutzen sondern _beginthreadex</p>
<p>Ich vermute, aber, dass diesin anderen Compilern mit deren CRTs ähnlich ist.<br />
<a href="http://blog.m-ri.de/index.php/2007/11/28/createthread-und-die-crt/" rel="nofollow">http://blog.m-ri.de/index.php/2007/11/28/createthread-und-die-crt/</a><br />
<a href="http://blog.m-ri.de/index.php/2008/02/28/afxbeginthread-versus-_beginthreadex/" rel="nofollow">http://blog.m-ri.de/index.php/2008/02/28/afxbeginthread-versus-_beginthreadex/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587226</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Wed, 24 Sep 2008 11:33:36 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Thu, 25 Sep 2008 05:49:24 GMT]]></title><description><![CDATA[<p>GUten Morgen .<br />
Nachdem ich nun die Threads erzeugen konnte möchte ich nun auf ihre Abrabeitung warten.<br />
Ich erzeuege die Threads wie folgt :</p>
<pre><code class="language-cpp">threadLiga *x = new threadLiga;
	x = (threadLiga*)pr;

	HANDLE hThread[5];
	//cout&lt;&lt;x-&gt;iSpieltag&lt;&lt;&quot;\n&quot;;
	for (int i = 0; i &lt; 5; i++)
	{

		threadLiga *temp = new threadLiga;
		temp-&gt;iSpielnummer = i;
		temp-&gt;iSpieltag = x-&gt;iSpieltag;
		temp-&gt;pLiga = x-&gt;pLiga;

		hThread[i] = CreateThread(NULL,0,Spiele_Match,(void*)temp,0,NULL);

	}

	WaitForMultipleObjects(5,hThread, true,INFINITE);
</code></pre>
<p>MIt der Funktion Waitfor MultipleObjects warte ich auf das Ende der jeweiligen Threads leider kommt dabei eine Exception. Wenn ich in der Schleife auf die Beendigung warte( jeden einzelen) dann geht es .HAt jemand einen Idee.</p>
<p>Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587622</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Thu, 25 Sep 2008 05:49:24 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Thu, 25 Sep 2008 05:54:57 GMT]]></title><description><![CDATA[<p>albert-einstein2 schrieb:</p>
<blockquote>
<p>Ich erzeuege die Threads wie folgt :</p>
<pre><code class="language-cpp">threadLiga *x = new threadLiga;
	x = (threadLiga*)pr;
</code></pre>
</blockquote>
<p>Schönes Speicherleck.</p>
<p>albert-einstein2 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">temp-&gt;pLiga = x-&gt;pLiga;
</code></pre>
</blockquote>
<p>Der Name pLiga deutet auf einen Zeiger hin. Wenn du nur einen Zeiger kopierst, dann benutzen alle Threads dasselbe Objekt. Ist das beabsichtigt, und hast du die Zugriffe synchronisiert?</p>
<p>albert-einstein2 schrieb:</p>
<blockquote>
<p>MIt der Funktion Waitfor MultipleObjects warte ich auf das Ende der jeweiligen Threads leider kommt dabei eine Exception.</p>
</blockquote>
<p>Geht's etwas genauer als &quot;eine Exception&quot;?</p>
<p>albert-einstein2 schrieb:</p>
<blockquote>
<p>Wenn ich in der Schleife auf die Beendigung warte( jeden einzelen) dann geht es</p>
</blockquote>
<p>Weil dann alle Threads <em>nacheinander</em> ablaufen. Dann hättest du dir die Threads auch sparen können. Also vermutlich wirklich ein Synchronisierungsproblem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587623</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 25 Sep 2008 05:54:57 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Thu, 25 Sep 2008 06:03:48 GMT]]></title><description><![CDATA[<p>MFK schrieb:</p>
<blockquote>
<p>albert-einstein2 schrieb:</p>
<blockquote>
<p>Ich erzeuege die Threads wie folgt :</p>
<pre><code class="language-cpp">threadLiga *x = new threadLiga;
	x = (threadLiga*)pr;
</code></pre>
</blockquote>
<p>Schönes Speicherleck.</p>
</blockquote>
<p>Warum ist das ein Speicherleck ?</p>
<p>Ansonsten hast du recht pLiga ist ein Zeiger. Ja das ist so beasichtigt. Der HIntergrund ist der : pLiga ist ein Zeiger auf eine Liga . Meine Thread Funtkion soll nun für diese Liga von einem bestimmten Spieltag (iSpieltag) alle Spiel ausführen (ebenfalls als Thread) deshalb müssen alle Thread sauf den gleiehn Zeiger zugriefen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587627</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587627</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Thu, 25 Sep 2008 06:03:48 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Thu, 25 Sep 2008 06:05:40 GMT]]></title><description><![CDATA[<p>albert-einstein2 schrieb:</p>
<blockquote>
<p>Warum ist das ein Speicherleck ?</p>
</blockquote>
<p>An das Objekt, das du da mit new erzeugst, kommst du nie wieder ran, weil du gleich danach den Zeiger auf ein anderes Objekt umbiegst. Du kannst es also nie wieder freigeben -&gt; Speicherleck.</p>
<p>albert-einstein2 schrieb:</p>
<blockquote>
<p>Meine Thread Funtkion soll nun für diese Liga von einem bestimmten Spieltag (iSpieltag) alle Spiel ausführen (ebenfalls als Thread) deshalb müssen alle Thread sauf den gleiehn Zeiger zugriefen.</p>
</blockquote>
<p>Wie gesagt, du hast offenbar ein Synchronisierungsproblem. Für weitere Diagnose hast du nicht genug Informationen geliefert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587628</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 25 Sep 2008 06:05:40 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Thu, 25 Sep 2008 06:16:52 GMT]]></title><description><![CDATA[<p>Okay danke für deine Antwort.</p>
<p>Hier noch ein paar zusätzlich iNfos</p>
<pre><code class="language-cpp">HANDLE hThread[1];

	for (int i = 1; i &lt;= liga-&gt;Get_Spieltag(); i++)
	{
		threadLiga *sp = new threadLiga;
		sp-&gt;pLiga = liga;
		sp-&gt;iSpieltag = i;

		hThread[0] = CreateThread(NULL,0,test_thread,(void*)sp,0,NULL);

	}

	WaitForMultipleObjects(1,hThread, true,INFINITE);

}

// ==========================================

DWORD WINAPI cVolleyballTrainer::test_thread(LPVOID pr)
{
	threadLiga *x = new threadLiga;
	x = (threadLiga*)pr;

	HANDLE hThread[5];
	//cout&lt;&lt;x-&gt;iSpieltag&lt;&lt;&quot;\n&quot;;
	for (int i = 0; i &lt; 5; i++)
	{

		threadLiga *temp = new threadLiga;
		temp-&gt;iSpielnummer = i;
		temp-&gt;iSpieltag = x-&gt;iSpieltag;
		temp-&gt;pLiga = x-&gt;pLiga;

		hThread[i] = CreateThread(NULL,0,Spiele_Match,(void*)temp,0,NULL);

	}

	WaitForMultipleObjects(5,hThread, true,INFINITE);

	return 1;
}

// ==========================================

DWORD WINAPI cVolleyballTrainer::Spiele_Match(LPVOID data)
{
	threadLiga *x = new threadLiga;
	x = (threadLiga*)data;

	//cout&lt;&lt;x-&gt;pLiga-&gt;Get_Ansetzungen(x-&gt;iSpieltag)[x-&gt;iSpielnummer]-&gt;pHeim-&gt;Get_Name()&lt;&lt;&quot; &quot;&lt;&lt;x-&gt;pLiga-&gt;Get_Ansetzungen(x-&gt;iSpieltag)[x-&gt;iSpielnummer]-&gt;pGast-&gt;Get_Name()&lt;&lt;&quot;\n&quot;;
	try
	{
		cMatch *ma = new cMatch(x-&gt;pLiga-&gt;Get_Ansetzungen(x-&gt;iSpieltag)[x-&gt;iSpielnummer]);
		x-&gt;pLiga-&gt;Set_Ergebnis(ma-&gt;Get_Ergebnis());
	}
	catch(cException *ex)
	{
		cout&lt;&lt;ex-&gt;sError&lt;&lt;&quot;\n&quot;;
	}

	return 1;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1587631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587631</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Thu, 25 Sep 2008 06:16:52 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Thu, 25 Sep 2008 06:22:22 GMT]]></title><description><![CDATA[<p>Und weiter?<br />
Sind Get_Ansetzungen und Set_Ergebnis ordentlich synchronisiert, oder ist das Prinzip Hoffnung?<br />
Ist dir klar, dass du bei jedem Spiele_Match-Aufruf auch noch ein cMatch-Objekt erzeugst, das nie wieder freigegeben wird?</p>
<p>Warum machst du das überhaupt mit Threads, und nicht einfach nacheinander?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587634</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 25 Sep 2008 06:22:22 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Thu, 25 Sep 2008 06:28:06 GMT]]></title><description><![CDATA[<p>Weil es 1. zu lange dauert. Und 2. Ich etwas lernen möchte.</p>
<pre><code class="language-cpp">// ==========================================

DWORD WINAPI cVolleyballTrainer::Spiele_Match(LPVOID data)
{
	threadLiga *x = new threadLiga;
	x-&gt;iSpielnummer = ((threadLiga*)pr)-&gt;iSpielnummer;
	x-&gt;iSpieltag = ((threadLiga*)pr)-&gt;iSpieltag;
	x-&gt;pLiga = ((threadLiga*)pr)-&gt;pLiga;

	//cout&lt;&lt;x-&gt;pLiga-&gt;Get_Ansetzungen(x-&gt;iSpieltag)[x-&gt;iSpielnummer]-&gt;pHeim-&gt;Get_Name()&lt;&lt;&quot; &quot;&lt;&lt;x-&gt;pLiga-&gt;Get_Ansetzungen(x-&gt;iSpieltag)[x-&gt;iSpielnummer]-&gt;pGast-&gt;Get_Name()&lt;&lt;&quot;\n&quot;;
	try
	{
		cMatch *ma = new cMatch(x-&gt;pLiga-&gt;Get_Ansetzungen(x-&gt;iSpieltag)[x-&gt;iSpielnummer]);
		x-&gt;pLiga-&gt;Set_Ergebnis(ma-&gt;Get_Ergebnis());
		delete ma;
	}
	catch(cException *ex)
	{
		cout&lt;&lt;ex-&gt;sError&lt;&lt;&quot;\n&quot;;
	}

	return 1;
}
</code></pre>
<p>Wäre das so besser.<br />
Also mit dem Speicherlecks und dem Freigeben ?<br />
Vielen Dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587638</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Thu, 25 Sep 2008 06:28:06 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Thu, 25 Sep 2008 06:28:24 GMT]]></title><description><![CDATA[<p>albert-einstein2 schrieb:</p>
<blockquote>
<p>Weil es 1. zu lange dauert. Und 2. Ich etwas lernen möchte.</p>
</blockquote>
<p>Wenn du von mehreren Fragen immer nur eine beantwortest, kommen wir nicht weiter.</p>
<p>Und ganz nebenbei, durch Threads wird dein Programm nicht unbedingt schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587639</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 25 Sep 2008 06:28:24 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Thu, 25 Sep 2008 06:32:45 GMT]]></title><description><![CDATA[<p>Ich denke schon. Da ja viele Objecte gleichzeit uasgeführet werden.</p>
<p>Also Get_Ansetzung liefert einen Zeiger zurück bestehend aus den Ansetzungen für den jeweiligen Spieltag.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587643</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Thu, 25 Sep 2008 06:32:45 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Thu, 25 Sep 2008 06:37:58 GMT]]></title><description><![CDATA[<p>albert-einstein2 schrieb:</p>
<blockquote>
<p>Ich denke schon. Da ja viele Objecte gleichzeit uasgeführet werden.</p>
</blockquote>
<p>Ein Prozessorkern kann nicht mehrere Dinge gleichzeitig ausführen. Es wird immer wieder zwischen Threads hin- und hergeschaltet.</p>
<p>albert-einstein2 schrieb:</p>
<blockquote>
<p>Also Get_Ansetzung liefert einen Zeiger zurück bestehend aus den Ansetzungen für den jeweiligen Spieltag.</p>
</blockquote>
<p>Ja, damit kann man nun gar nichts anfangen. Machst du da etwas, das synchronisiert werden müsste?</p>
<p>Und die Frage, welche Exception geworfen wird, und an welcher Stelle, hast du immer noch nicht beantwortet.</p>
<p>Und wenn du dein cMatch-Objekt sowieso gleich wieder freigibst, dann leg es doch bitte auf dem Stack an, nicht mit new.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587644</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 25 Sep 2008 06:37:58 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Thu, 25 Sep 2008 06:47:19 GMT]]></title><description><![CDATA[<p>Okay da hast natürlich Recht. Ich besitze aber einen Rechner mit mehrerer Kernen und da (so denke ich 9 ist ein UNterschied schon zu spüren. Außerdem bekommt eine Anwendung mehr Rechenzeit je mehr Prozesse sie laufen hat. Also selbst auf einem Single Kern Porzessor hast du einen Unterschied. Aber darum geht es huier ja nicht.</p>
<p>Also die beiden Funktionen brauchen nicht synchronisiert werden. Ihc habe mal zum testen den Aufruf von cMatch rausgenbommen, und das gleiche bild geshen . also liegt der fehler woanders. ich habe die vermutung das das beenden der thread nicht so richtig klappt.</p>
<p>gibt es da noch eine andere alternavtive ( funktion ) auf das ende eines threads zu warten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587648</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Thu, 25 Sep 2008 06:47:19 GMT</pubDate></item><item><title><![CDATA[Reply to Thread erzeugen. on Thu, 25 Sep 2008 06:56:35 GMT]]></title><description><![CDATA[<p>So ich habe jetzt noch eine interessante Entdekcung gemacht :</p>
<pre><code class="language-cpp">HANDLE hThread[2];

	for (int i = 0; i &lt; 2; i++)
	{
		threadLiga *sp = new threadLiga;
		sp-&gt;pLiga = liga;
		sp-&gt;iSpieltag = i + 1;

		hThread[i] = CreateThread(NULL,0,test_thread,(void*)sp,0,NULL);

	}

	WaitForMultipleObjects(2,hThread, true,INFINITE);

}

// ==========================================

DWORD WINAPI cVolleyballTrainer::test_thread(LPVOID pr)
{
	threadLiga *x = new threadLiga;
	x-&gt;iSpielnummer = ((threadLiga*)pr)-&gt;iSpielnummer;
	x-&gt;iSpieltag = ((threadLiga*)pr)-&gt;iSpieltag;
	x-&gt;pLiga = ((threadLiga*)pr)-&gt;pLiga;

	cout&lt;&lt;&quot;Spieltag : &quot;&lt;&lt;x-&gt;iSpieltag&lt;&lt;&quot; &quot;;

	HANDLE hThread[5];
	//cout&lt;&lt;x-&gt;iSpieltag&lt;&lt;&quot;\n&quot;;
	for (int i = 0; i &lt; 5; i++)
	{

		threadLiga *temp = new threadLiga;
		temp-&gt;iSpielnummer = i;
		temp-&gt;iSpieltag = x-&gt;iSpieltag;
		temp-&gt;pLiga = x-&gt;pLiga;

		hThread[i] = CreateThread(NULL,0,Spiele_Match,(void*)temp,0,NULL);

	}

	WaitForMultipleObjects(5,hThread, true,INFINITE);	

	return 1;
}

// ==========================================

DWORD WINAPI cVolleyballTrainer::Spiele_Match(LPVOID pr)
{
	threadLiga *x = new threadLiga;
	x-&gt;iSpielnummer = ((threadLiga*)pr)-&gt;iSpielnummer;
	x-&gt;iSpieltag = ((threadLiga*)pr)-&gt;iSpieltag;
	x-&gt;pLiga = ((threadLiga*)pr)-&gt;pLiga;

	//cout&lt;&lt;x-&gt;pLiga-&gt;Get_Ansetzungen(x-&gt;iSpieltag)[x-&gt;iSpielnummer]-&gt;pHeim-&gt;Get_Name()&lt;&lt;&quot; &quot;&lt;&lt;x-&gt;pLiga-&gt;Get_Ansetzungen(x-&gt;iSpieltag)[x-&gt;iSpielnummer]-&gt;pGast-&gt;Get_Name()&lt;&lt;&quot;\n&quot;;
/*	try
	{
		cMatch *ma = new cMatch(x-&gt;pLiga-&gt;Get_Ansetzungen(x-&gt;iSpieltag)[x-&gt;iSpielnummer]);
		x-&gt;pLiga-&gt;Set_Ergebnis(ma-&gt;Get_Ergebnis());
		//delete ma;
	}
	catch(cException *ex)
	{
		cout&lt;&lt;ex-&gt;sError&lt;&lt;&quot;\n&quot;;
	}*/

	cout&lt;&lt;&quot;\n&quot;&lt;&lt;x-&gt;iSpielnummer&lt;&lt;&quot;\n&quot;;

	return 1;
}
</code></pre>
<p>Wenn ich nur einen Thread starte (test_thread) dann geht alles . Starte ich jedeoch 2 oder mehr kommt es wieder zum fehler. Und nun habe ich nur ausgaben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1587652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1587652</guid><dc:creator><![CDATA[albert-einstein2]]></dc:creator><pubDate>Thu, 25 Sep 2008 06:56:35 GMT</pubDate></item></channel></rss>