<?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[TThread wird geschlossen]]></title><description><![CDATA[<pre><code class="language-cpp">class x : private TThread
 {
  private:
//...
  public:
    __fastcall x (andereklasse*, bool paused = false);
    void __fastcall Execute (void);
    void __fastcall abc (void);
    void __fastcall def (void);
//...
 };
__fastcall x::x (...) : TThread(paused)
 {
  this-&gt;FreeOnTerminate = false;
  this-&gt;Priority = tpHigher;
//...
 };
void __fastcall Execute (void)
 {
//ist leer - hab einzelne Funktionen bzw. events, die ausgeführt werden sollen und nicht eine einzige große &quot;aufgabe&quot;...
 };
</code></pre>
<p>ich starte meinen thread über den (zum teil geposteten) Konstruktor und will, dass er läuft - so lange, bis ich meinen Destruktor aufrufe, da der Thread genau wie ne normale Klasse arbeiten soll - also immer laufen soll, nur eben nicht im &quot;main&quot;-thread...<br />
Geht das, oder ist das mit nem Thread prinzipiell unmöglich? Wenn es geht (was ich mal ganz stark vermuten würde ^^), wie?</p>
<p>Danke schon mal <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/topic/183889/tthread-wird-geschlossen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 08:12:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183889.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 10 Jun 2007 06:00:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to TThread wird geschlossen on Sun, 10 Jun 2007 06:00:59 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class x : private TThread
 {
  private:
//...
  public:
    __fastcall x (andereklasse*, bool paused = false);
    void __fastcall Execute (void);
    void __fastcall abc (void);
    void __fastcall def (void);
//...
 };
__fastcall x::x (...) : TThread(paused)
 {
  this-&gt;FreeOnTerminate = false;
  this-&gt;Priority = tpHigher;
//...
 };
void __fastcall Execute (void)
 {
//ist leer - hab einzelne Funktionen bzw. events, die ausgeführt werden sollen und nicht eine einzige große &quot;aufgabe&quot;...
 };
</code></pre>
<p>ich starte meinen thread über den (zum teil geposteten) Konstruktor und will, dass er läuft - so lange, bis ich meinen Destruktor aufrufe, da der Thread genau wie ne normale Klasse arbeiten soll - also immer laufen soll, nur eben nicht im &quot;main&quot;-thread...<br />
Geht das, oder ist das mit nem Thread prinzipiell unmöglich? Wenn es geht (was ich mal ganz stark vermuten würde ^^), wie?</p>
<p>Danke schon mal <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/1302294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302294</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 10 Jun 2007 06:00:59 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Sun, 10 Jun 2007 11:13:40 GMT]]></title><description><![CDATA[<p>Natürlich geht das. Genau das ist a der Zweck von Threads. Der Witz ist allerdings, dass TThread keine MEssage-Queue enthält wenn ich mich richtig erinnere. Das heisst also, du musst Execute mit Leben befüllen. Am Ende von Execute beendet sich der Thread selbst. Um das zu verhindern musst du auf das Terminate-Flag des Threads prüfen und das Ganze in einer Schleife betreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302369</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Sun, 10 Jun 2007 11:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Sun, 10 Jun 2007 15:55:51 GMT]]></title><description><![CDATA[<p>TThread enthält zwar keine Nachrichtenbehandlung, aber dennoch kann man, mittels der WinAPI, Botschaften an einen Thread senden (PostThreadMessage), als auch Botschaften empfangen (PeekMessage, GetMessage).<br />
Möglicherweise wäre aber auch der Einsatz von Events oder Semaphores sinnvoll.</p>
<p>Grüße Joe_M.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1302570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1302570</guid><dc:creator><![CDATA[zufaulzumeinloggen]]></dc:creator><pubDate>Sun, 10 Jun 2007 15:55:51 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Tue, 12 Jun 2007 23:04:30 GMT]]></title><description><![CDATA[<p>wtf sind &quot;Semaphores&quot;.. events nutze ich zwar - aber im Moment seh ich einfach keinen Sinn, einen Thread zu erstellen - wenn er kein thread ist...<br />
execute immer wieder ausführen... hab ich auch nichts gekonnt... die cpu-auslastung ist bei x % und der thread ist so und so voll ausgelastet - da kann ichs auch gleich im mainthread lassen... den thread jedes mal neu zu createn ist dumm, weil halt große arrays da drin verwaltet werden... gibt es keine möglichkeit, nen neuen thread zu starten ohne ihn durch die auslastung zu gleich unnutzbar zu machen? was ist, wenn ich ne neue form erstelle? nimmt er dann zu gleich nen neuen thread? nein, oder? oder gibt es vll noch so etwas ähnliches, wie threads?</p>
<p>Danke...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304501</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 12 Jun 2007 23:04:30 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Wed, 13 Jun 2007 04:52:35 GMT]]></title><description><![CDATA[<p>Bezüglich Auslastung:<br />
TThread::Suspend<br />
TThread::Resume</p>
<p>Bezüglich Events:<br />
CreateEvent<br />
SetEvent<br />
KillEvent</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304531</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Wed, 13 Jun 2007 04:52:35 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Wed, 13 Jun 2007 07:54:07 GMT]]></title><description><![CDATA[<p>Du sollst in der Hauptschleife ja auch nur auf die Events oder Botschaften warten. Diese Events oder Botschaften lösen dann die Funktion aus. Und während des Wartens wird keine CPU-Zeit verbraucht.</p>
<p>Der Unterschied zwischen Events/Semaphores ist, das mit Botschaften ein spezifischer Thread angesprochen wird, aber bei Events/Semaphores alle Threads angesprochen werden (können) und ein beliebiger die Arbeit ausführt. Man kann also nicht festlegen, welcher der Threads die Arbeit übernimmt. Beide Vorgehensweisen haben ihre Vorteile. Welche man einsetzt wird normalerweise vom Anwendungskonzept bestimmt. Da Du anscheinend bestimmte Aufgaben an bestimmten Objekten durchführen willst, sind vermutlich Botschaften die bessere Wahl.</p>
<p>Bedenke bitte auch, dass Du den Zugriff auf Objekte, die sowohl im Thread, als auch im Application-Thread verwendet werden, z.B. über eine CriticalSection gegen gleichzeitigen Zugriff abgesichert werden müssen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304603</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304603</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 13 Jun 2007 07:54:07 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Wed, 13 Jun 2007 13:36:18 GMT]]></title><description><![CDATA[<p>ich weiß aber nicht, wann der thread wieder fortgesetzt werden muss... ich hab in dem thread nen serversocket drin und muss auf das reagieren, was ich bekomm, gleichzeitig können sich aber auch noch andere clients verbinden... meine struktur sieht folgendermaßen aus (sry, dass ich ne einrück, aber hier suckt das ^^ und private und public is ja jz au erst ma egal):</p>
<pre><code class="language-cpp">class a : private TThread
{
class b : private TThread
{
TServerSocket *x;
//usw...
};
DynamicArray &lt;b*&gt; B;
};
</code></pre>
<p>je nach dem, wie viele clients zu meinem Server verbunden sind und je nach dem, wie viele das in den letzten paar sekunden zu dem sockel xyz getan haben, startet der thread a beliebig viele sockets (und die zugehörigen arrays von userdaten) b...<br />
events weiß ich, wie die funktionieren - hab ich auch zur genüge drin, weil mysql und so ja auch was zu tun haben will ^^<br />
aber ich bräuchte halt trotzdem noch nen thread, weil sonst ist es auch sinnlos, mehrere sockets zu starten... ohne das hab ich aber nen extrem großes problem, wenn zum bsp. 50 clients zeitgleich connecten, dann is der server hoffnungslos überlastet und lässt einfach alles sein ^^<br />
kann jmd von euch vll mal die schleife im execute schreiben, wie ihr das meint? (man hört sich das noobig an... xD)<br />
warum ich mich wunder:<br />
wenn ich im execute nichts mach, muss ich den thread pausieren lassen, sonst terminated er sich... wenn ich aber was mach, wird der thread kaum nebenbei noch das event oder die fkt. behandeln, weil er ja im execute was macht... oder seh ich das falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304861</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 13 Jun 2007 13:36:18 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Wed, 13 Jun 2007 14:51:23 GMT]]></title><description><![CDATA[<p>Nun gut, hier ein Beispiel...</p>
<pre><code class="language-cpp">void __fastcall TTestThread::Execute()
{
	try
	{
		ReturnValue = 0;
		MAX_HANDLES = 3;
		try
		{
			HANDLEARRAY = NULL;
			HANDLEARRAY = new HANDLE[MAX_HANDLES];

			HANDLEARRAY[0] = hEventGlobalTerminationRequest;	// für Einleitung Programmende
			HANDLEARRAY[1] = hEventFunktionA;						// Event für Funktion A
			HANDLEARRAY[2] = hEventFunktionB;						// Event für Funktion B

			while (true)
			{
				DWORD WaitResult;
				DWORD WaitFor = INFINITE;
				WaitResult = WaitForMultipleObjects(MAX_HANDLES, HANDLEARRAY, false, WaitFor);
				switch (WaitResult)
				{
					case WAIT_OBJECT_0:	// Programmbeendigung eingeleitet
						bTerminationRequested = true;
						ReturnValue = 0;
					break;
					case WAIT_OBJECT_0 + 1:
						FunktionA();	// Aufruf Funktion A
					break;
					case WAIT_OBJECT_0 + 2;
						FunktionB();	// Aufruf Funktion A
					break;
				}
				if (bTerminationRequested || bInternalError)
					break;
			}
		}
		catch (Exception &amp;Ex)
		{
			// Fehler
			bInternalError = true;
			if (ReturnValue == 0)	// in den Funktionen A oder B solltest Du einen eindeutigen Fehlercode setzen
				ReturnValue = -1;	// unbekannter Fehler
		}
	}
	__finally
	{
		// aufräumen
	}
}
//---------------------------------------------------------------------------
</code></pre>
<p>Ein paar Erklärungen dazu:<br />
hEventGlobalTerminationRequest ist ein WinAPI Event, dass von der Hauptanwendung ausgelöst wird, wenn das Programm beendet werden soll. Dies ist zwingend notwendig, da durch das WaitForMultipleObjects nicht auf TThread::Terminate() reagiert werden kann. Selbst wenn Du einen sehr kleinen Timeout-Wert einträgst, funktioniert das nicht wirklich. Dieser Event ist in allen Threads identisch (also einmal im der Hauptanwendung erzeugen und als Parameter übergeben.</p>
<p>hEventFunktionA und ...B. Wenn es egal ist, welcher Thread auf den Event reagiert, kannst Du diesen auch global definieren und als Parameter übergeben. Wenn jeder Thread spezifisch angesprochen werden soll, muss er innerhalb des Threads erzeugt werden und am sinnvollsten über eine Funktion abfragbar gemacht werden (hierfür brauchst Du keine CriticalSection, wenn Du das Event im Konstruktor erzeugst, dann finden ja nur lesende Zugriffe statt).</p>
<p>Wenn der Event für FuntkionA oder B ausgelöst werden kann, während der Thread noch arbeitet und Du jeden Aufruf einzeln auswerten mußt, verwende einen Semaphore. Der wird so lange ausgelöst, bis der interne Zähler 0 ist. Praktisch kannst Du damit Events puffern.</p>
<p>Du brauchst den Thread auch nicht 'Suspenden' oder 'Resumen'. So lange kein Event ausgelöst wird, steht der Thread in der WaitForMultipleObjects und verbraucht keine CPU-Zeit.</p>
<p>Un die FunktionA im Thread auszulösen mußt den hEventFunktionA setzen. Sprich überall dort, wor Du FunktionA() aufrufst, musst Du statt dessen SetEvent(hEventFunktionA); aufrufen.</p>
<p>Ich hoffe, das hilft erst einmal. Falls Du Fragen hast...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304946</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 13 Jun 2007 14:51:23 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Wed, 13 Jun 2007 23:22:17 GMT]]></title><description><![CDATA[<p>Danke - das hat mich doch nen ganzes Stück weitergebracht (und dich bestimmt auch einiges an Zeit gekostet), allerdings hab ich da noch ein Problem...<br />
Also irgendwas mit den Pointern auf die Events hab ich noch ne gerafft..</p>
<p>Das sollte ja so weit richtig sein - oder hab ich da was falsch verstanden?</p>
<pre><code class="language-cpp">void __fastcall maindahlia::Execute (void)
 {
  bool again = true;
  int max = 1, WaitResult;
  HANDLE *Handles = new HANDLE[max];
  Handles[0] = &amp;FTerminateRequest;
//restliche Handles hinzufügen
  while (again)
   {
    WaitResult = WaitForMultipleObjects (max, Handles, false, INFINITE);
    switch (WaitResult - WAIT_OBJECT_0)
     {
      case 0:
       again = false;
       break;
      case 1:
// noch machen ^^
       break;
     }
   };
  this-&gt;Free();
 };
</code></pre>
<p>aber die deklaration wird irgendwo falsch sein: (und wohl auch etwas zu umständlich?)</p>
<pre><code class="language-cpp">typedef void __fastcall (__closure *TTerminateRequest) (void);
TTerminateRequest FTerminateRequest;
__property TTerminateRequest Termination = {read = FTerminateRequest};
</code></pre>
<p>und zum Beenden würde ich dann das aufrufen:</p>
<pre><code class="language-cpp">SetEvent(&amp;Dahlia-&gt;Termination);
</code></pre>
<p>aber WaitForMultipleObjects wird anscheind dauernd ausgelöst... Aber der Rückgabewert (irgendwas, was mein switch ne drin hat, als falsch sein muss) zeigt, dass da irgendwo noch nen Fehler drin ist...<br />
Wär dir dankbar, wenn du mir mal nen Denkanstoß oder so geben könntest</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305273</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305273</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Wed, 13 Jun 2007 23:22:17 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Thu, 14 Jun 2007 07:35:01 GMT]]></title><description><![CDATA[<p>Das Beispiel verwendet WinAPI-Events, nicht TEvent (es werden ja auch die WinAPI-Wait...-Funktionen verwendet)</p>
<pre><code class="language-cpp">// Deklaration:
HANDLE hEventGlobalTerminationRequest;
// Erzeugen:
hEventGlobalTerminationRequest = CreateEvent(NULL, true, false, NULL); 
// Löschen:
CloseHandle(hEventGlobalTerminationRequest);
</code></pre>
<p>Sollte aber auch mit einem TEvent funktionieren, dann muss aber TEvent::Handle für die WaitFor...-Funktion verwendet werden.</p>
<p>Was Du mit der Funkion erreichen willst, ist mir nicht ganz klar, für einen WinAPI-Event reicht es so:</p>
<pre><code class="language-cpp">HANDLE __fastcall TMainForm::GetGlobalTerminationRequestEventHandle()
{
	return hEventGlobalTerminationRequest;
}
//---------------------------------------------------------------------------
</code></pre>
<p>Du solltest Dir auf jeden Fall auch mal die Parameter für CreateEvent() ansehen. Für das hEventGlobalTerminationRequest ist es so richtig. Dieses hEventGlobal... erzeuge ich bei mir im MainForm und den Handle übergebe ich dann an alle Threads. Ausgelöst wird es dann innerhalb von TForm::OnClose, oder im Destruktor des Forms. Da das Event nicht automatisch zurückgesetzt wird, wird es von allen Threads behandelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1305383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1305383</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 14 Jun 2007 07:35:01 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Fri, 15 Jun 2007 07:24:38 GMT]]></title><description><![CDATA[<p>Hallo,<br />
wenn ich das hier so lese und mich daran erinnere, wie es mir geht zum Thema Threads (ich hatte es gerade erfolgreich verdrängt)... Vielleicht wäre ein 2. Tutorial zum Thema Threads nicht schlecht. Es gibt ja eins, wo beschrieben ist wie man einen Thread erstellt... Ein fortgeschrittenes, wo beschrieben ist wie man mit Threads arbeitet und vielleicht, wie man die optimal einsetzt - das wär was! Ich würd' ja eins schreiben, aber ich habe KEINE AHNUNG...<br />
Also bleib ich beim Anregen. <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>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306275</guid><dc:creator><![CDATA[Kolumbus]]></dc:creator><pubDate>Fri, 15 Jun 2007 07:24:38 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Fri, 15 Jun 2007 08:37:35 GMT]]></title><description><![CDATA[<p>Falls diese Aufforderung an mich gehen sollte, muss ich leider sagen, dass ich weder die Zeit, noch das schrifstellerische Talent dazu habe. <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>
<p>Davon abgesehen, wäre vermutlich ein Tutorial unter Verwendung von Botschaften sinnvoller. Wie auch immer, sowohl die Variante mit Botschaften, als auch die mit Events fallen in den WinAPI-Bereich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306336</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 15 Jun 2007 08:37:35 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Fri, 15 Jun 2007 09:15:49 GMT]]></title><description><![CDATA[<p>Deine Ausdrucksweise ist doch brauchbar - man muss ja für n Tutorial nicht schriftstellerische / dichterische Maßstäbe ansetzen (Du glaubst nicht, was ich schon Alles als Tutorial angeboten bekommen habe!); Hauptsache ist doch, dass der Schreiber was von der Materie versteht! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Ansonsten entwickelt sich ja so ein Tutorial - ich kenne jedenfalls kein vernünftiges Tut, welches bereits &quot;in Version 0.1a&quot; vollständig und fehlerfrei war (gut, manche &quot;0.1a Tut's&quot; sind größtenteils kopiert - aber da werden ja auch die Fehler mit übernommen).<br />
Wo und wie jetzt das spezielle Tut hin müsste kann ich nicht beurteilen - mir hätte irgendwie sowas geholfen:</p>
<p>&quot;Threads 2: Arbeiten mit Threads / optimaler Einsatz&quot; mit Sachen wie (viell):</p>
<p>Variablen übergeben / Funktionen kreuz und quer aufrufen / weiß nicht / Optimierungen / Spezielle Eigenheiten von Threads / auf keinen Fall dürfen Sie das machen / blabla <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>
<p>Aber was schreibe ich hier, wenn jemand Zeit hätte würde es das wohl schon geben?!</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306363</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306363</guid><dc:creator><![CDATA[Kolumbus]]></dc:creator><pubDate>Fri, 15 Jun 2007 09:15:49 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Fri, 15 Jun 2007 09:41:40 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Kolumbus schrieb:</p>
<blockquote>
<p>&quot;Threads 2: Arbeiten mit Threads / optimaler Einsatz&quot; mit Sachen wie (viell):</p>
<p>Variablen übergeben / Funktionen kreuz und quer aufrufen / weiß nicht / Optimierungen / Spezielle Eigenheiten von Threads / auf keinen Fall dürfen Sie das machen / blabla <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>Die meisten Sachen die du da sagst sind aber nicht wirklich TThread-spezifisch. Du solltest dir da lieber allgemeine Erläuterungen zum Thema Thread und nebenläufige Programmierung durchlesen. Das ist nämlich erstens Systemspezifisch (WinAPI, Speicher- und Prozeßimplementation allgemein) und zum zweiten sehr umfangreich.</p>
<p>Tutorials sollen im allgemeinen den Einstieg in ein Gebiet erläutern. Aber dieses Thema wäre schon sehr fortgeschritten.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306380</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306380</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 15 Jun 2007 09:41:40 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Fri, 15 Jun 2007 10:01:46 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>akari schrieb:</p>
<blockquote>
<p>Tutorials sollen im allgemeinen den Einstieg in ein Gebiet erläutern. ...</p>
</blockquote>
<p>Das wusste ich nicht. War da bisher anderer Meinung, da ich schon viele sehr spezielle (tiefgehende) Tut's gesehen hab!?? <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>
<p>akari schrieb:</p>
<blockquote>
<p>Die meisten Sachen die du da sagst sind aber nicht wirklich TThread-spezifisch.</p>
</blockquote>
<p>deswegen ja:</p>
<p>Kolumbus schrieb:</p>
<blockquote>
<p>Wo und wie jetzt das spezielle Tut hin müsste kann ich nicht beurteilen...</p>
</blockquote>
<p>Gut, hätte ich besser so ausgedrückt: Keine Ahnung, ob ein tiefergehendes Tut zum Thema Thread sinnvoll wäre und wo es hin müsste - ...</p>
<p>akari schrieb:</p>
<blockquote>
<p>Du solltest dir ... allgemeine Erläuterungen zum Thema Thread und nebenläufige Programmierung durchlesen. Das ist nämlich ... Systemspezifisch (WinAPI, Speicher- und Prozeßimplementation allgemein)...</p>
</blockquote>
<p>Gut das mal so deutlich gelesen zu haben, im Ernst.</p>
<p>MfG</p>
<p>PS: Mal ne persönliche Frage <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7971">@akari</a>: Wo entspringt eigentlich Dein Nick? hab da so ne Theorie... <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="😃"
    /> Ich nehm's nicht persönlich wenn Du darauf nicht antwortest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306394</guid><dc:creator><![CDATA[Kolumbus]]></dc:creator><pubDate>Fri, 15 Jun 2007 10:01:46 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Fri, 15 Jun 2007 10:11:12 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Das Problem bei einem weitergehendes Thread-Tutorial hier im BCB-Forum wäre das es in drei Ebenen aufgeteilt sein müßte :<br />
- Die Theorie<br />
- Die Windows-spezifische Umsetzung, Besonderheiten unter Windows, WinAPI<br />
- Die Kapselung der Windows-Thread in der VCl mit TThread.<br />
Und dabei ist der letzte Punkt noch der einfachste und kürzeste.</p>
<p>Zum zweiten Punkt kannst du Nachforschungen im WinAPI-Forum oder in der MSDN anstellen, du wirst merken das da einiges zu lesen ist.<br />
Und zum ersten Punkt kannst du Skripte aus Unis oder Sachbücher lesen.</p>
<p>Mein Nick ist eine Weiterverwendung eines Namens meines alten RPG-Charakters. Ja ich weiß mittlerweile das eigentlich ein weiblicher Name ist <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>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1306402</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1306402</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Fri, 15 Jun 2007 10:11:12 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Sun, 17 Jun 2007 13:38:49 GMT]]></title><description><![CDATA[<p>ok.. b2t ^^<br />
ich hab noch eine frage:<br />
mit CreateEvent kann man ja nur einen String (bzw. char*) mit übergeben an das Event... Wie soll ich dann aber zum Beispiel nen Socket übergeben? Macht man da noch nen Array und speichert das so, dass man halt ne Art ID mit an das Event übergibt und dan im Array sucht, was eigtl mit übergeben wird?<br />
dann können ja auch 3 zur gleichen zeit connecten... wie macht man das am blödesten mit den events - wenn ich nur ein handle dafür hätte würd ich es ja einfach überschreiben - da hatte irgendwer mal kurz Semaphores gesagt... Aber irgendwie konnte ich nirgendwo richtig finden, WIE es geht... Was das ist weiß ich denke jz schon so halbwegs ^^<br />
Und noch ein was:<br />
Ich hab ja ne Klasse von TThread abgeleitet, hab die Execute-Prozedur komplett blockiert mit dem WaitForMultipleObjects in ner Endlosschleife... Wenn die Klasse aber noch andere Funktionen hat (zum Beispiel erst mal die Events, die von dem Socket ausgehen, wo ich dann das WinAPI-Event auslöse) - geht das überhaupt? Direkt kann man das ja nicht machen, oder? Weil der Socket ja als Event nur ne Funktion bzw. Prozedur akzeptiert...</p>
<p>Irgendwie stell ich mich gerad bissl doof an ^^<br />
Danke schon mal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1307689</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1307689</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 17 Jun 2007 13:38:49 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Mon, 18 Jun 2007 09:44:16 GMT]]></title><description><![CDATA[<p>Ohne die Anwendungslogik zu kennen, ist es schwer etwas dazu zu sagen. Normalerweise sollte man versuchen, Daten bereits beim Erstellen des Threads mit zu übergeben (Konstruktor erweitern).</p>
<p>Ist diese Vorgehensweise nicht möglich, würde ich eher dazu tendieren, die zu bearbeitenden Objekte in der Anwendung, also z.B. im MainForm zu verwalten und den/die Thread(s) die Objekte holen zu lassen. Der Thread muss dann nur informiert werden, dass es neue Arbeit gibt (Event oder Semaphore). Hierbei muss allerdings ein Zugriffsschutz verwendet werden. Möglicherweise reicht dazu eine TThreadList aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308249</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 18 Jun 2007 09:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Thu, 21 Jun 2007 06:18:47 GMT]]></title><description><![CDATA[<p>Hi nochmal <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7971">@akari</a>,</p>
<p>um die Sache zu vervollständigen: Da ich meine Nick's immer aus dem real-life beziehe, hatte ich ne andere Theorie: akari hatte als kleiner Lausebengel ne Spielekonsole und konnte deren Namen nicht korrekt aussprechen. Und so wurde schon in frühen Jahren aus einem allseits bekannten Atari der im Forum bekannte &quot;akari&quot;... <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="😉"
    /><br />
Das mit dem Mädchennamen wusste ich übrigens auch nicht, aber jetzt wo Du's so sagst... <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>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310351</guid><dc:creator><![CDATA[Kolumbus]]></dc:creator><pubDate>Thu, 21 Jun 2007 06:18:47 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Thu, 21 Jun 2007 07:18:51 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Nein ich hatte nie einen Atari. <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="😉"
    /><br />
Das reicht aber jetzt an Offtopic.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1310393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1310393</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 21 Jun 2007 07:18:51 GMT</pubDate></item><item><title><![CDATA[Reply to TThread wird geschlossen on Fri, 22 Jun 2007 13:59:41 GMT]]></title><description><![CDATA[<p>&quot;Ohne die Anwendungslogik zu kennen, ist es schwer etwas dazu zu sagen. Normalerweise sollte man versuchen, Daten bereits beim Erstellen des Threads mit zu übergeben (Konstruktor erweitern).&quot;<br />
Das mach ich ja... Ich erstelle ihn und übergebe die nötigen Parameter (sind aber nur sehr wenige (einer oder maximal noch zwei)... Der Rest an Parametern (bzw. Arrays) wird im Thread erstellt und verwaltet...<br />
&quot;Der Thread muss dann nur informiert werden, dass es neue Arbeit gibt (Event oder Semaphore)&quot; Nun war genau das die Frage, was besser ist, wenn ich nen Socket drin hab und dem zu Folge können ja auch mehrere Clients zu gleich verbinden (also nehm ich ja mal an, dass Semaphores besser sind, wär nur noch die Frage, wie das funktioniert... Mir würden ja einfach nen paar Befehle dazu reichen und ich guck den Rest selbst nach, aber so weiß ich nicht mal, wo ich anfangen soll zu suchen - zum googlen bin ich irgendwie zu blöd... <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=":/"
      alt="😕"
    /> ).<br />
&quot;Hierbei muss allerdings ein Zugriffsschutz verwendet werden.&quot; Den brauch ich ja nur bei Schreibzugriffen, nicht beim Lesen - das fällt also komplett weg und wenn nicht, dann werd ich das schon selbst hinbekommen...<br />
Jetzt steht aber noch immer meine Frage im Raum, wenn ich ne Klasse erstelle und von TThread ableite, wie verhält sich das dann, wenn ich Execute mit WaitFor... blockiere und aber nen Event ausgelöst haben will (zum bsp. beim OnConnect), kann ich da ja nicht direkt nen API-Event übergeben - brauch ich also erst ne Funktion, die das API-Event auslöst und beim Borland-Event gestartet wird...</p>
<p>Danke schon mal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1311554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1311554</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Fri, 22 Jun 2007 13:59:41 GMT</pubDate></item></channel></rss>