<?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[CriticalSection in Threads]]></title><description><![CDATA[<p>Hallo anbei mein Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;windows.h&gt;
#include &lt;conio.h&gt;
#include &lt;process.h&gt;
#include &lt;stdio.h&gt;

using namespace std;

// Gemeinsamme struktur
struct gemeinsamme_daten{
	int array[5];
};

// Object von Gemeinsamer Struktur
 gemeinsamme_daten daten;

	// Erstellen der Critical section
 CRITICAL_SECTION cs;

 // CRITICAL_SECTION cs2;

DWORD WINAPI ThreadProc1(LPVOID lpParam){
	gemeinsamme_daten *p = (gemeinsamme_daten*) lpParam;
	int i(0);
	while(true){
		EnterCriticalSection(&amp;cs);
		for(int y(0); y &lt;= 5; y++){

			p-&gt;array[y] = i;

		}
		LeaveCriticalSection(&amp;cs);
	i++;

	}
return 0;
}

DWORD WINAPI ThreadProc2(LPVOID lpParam){
	gemeinsamme_daten *p = (gemeinsamme_daten*) lpParam;
	int i(0);	
	while(true){
		 EnterCriticalSection(&amp;cs);
		for(int y(0); y &lt;= 5; y++){

			cout &lt;&lt; p-&gt;array[y];

		}
		LeaveCriticalSection(&amp;cs);
	i++;

	}
return 0;
}

// +---------------------------------------------------------------------------
// +  main - Methode
// +---------------------------------------------------------------------------

int main(void) 
{

	// HANDLES und VARIABLEN
	HANDLE hThread1, hThread2;
	DWORD dwThreadId1, dwThreadId2;
	DWORD wait1, wait2;
	InitializeCriticalSection(&amp;cs);

	hThread1 = CreateThread( 
		        NULL,              // default security attributes
			    0,                 // use default stack size  
		        ThreadProc1,        // thread function
			    (LPVOID) &amp;daten,             // argument to thread function
			    0,                 // use default creation flags
			    &amp;dwThreadId1);   // returns the thread identifier 

	hThread2 = CreateThread(
				NULL,              // default security attributes
				0,                 // use default stack size  
				ThreadProc2,        // thread function 
				(LPVOID) &amp;daten,    // argument to thread function 
				0,                 // use default creation flags 
				&amp;dwThreadId2);   // returns the thread identifier 

	while(true){
		if (_kbhit())break;
		Sleep(100);
	}	

	wait1 = WaitForSingleObject(
			 hThread1,
			 INFINITE
	);

	wait1 = WaitForSingleObject(
			 hThread2,
			 INFINITE
	);

// ENDE
	DeleteCriticalSection(&amp;cs);
	//DeleteCriticalSection(&amp;cs2);

	system(&quot;Pause&quot;);
     return 0;
}
</code></pre>
<p>Nun zu meinem Problem, ein Thread soll daten ins Array schreiben, der andere ausgeben. Jetzt war das ganze natürlich chaotisch, was ich mit CriticalSections entwirren wollte. Nur bricht er mir immer ab was mache ich falsch? Komplett fertig ist der code noch nicht aber die CriticalSections müssten schon gehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183125/criticalsection-in-threads</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 01:13:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183125.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Jun 2007 19:32:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to CriticalSection in Threads on Fri, 01 Jun 2007 19:32:17 GMT]]></title><description><![CDATA[<p>Hallo anbei mein Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;windows.h&gt;
#include &lt;conio.h&gt;
#include &lt;process.h&gt;
#include &lt;stdio.h&gt;

using namespace std;

// Gemeinsamme struktur
struct gemeinsamme_daten{
	int array[5];
};

// Object von Gemeinsamer Struktur
 gemeinsamme_daten daten;

	// Erstellen der Critical section
 CRITICAL_SECTION cs;

 // CRITICAL_SECTION cs2;

DWORD WINAPI ThreadProc1(LPVOID lpParam){
	gemeinsamme_daten *p = (gemeinsamme_daten*) lpParam;
	int i(0);
	while(true){
		EnterCriticalSection(&amp;cs);
		for(int y(0); y &lt;= 5; y++){

			p-&gt;array[y] = i;

		}
		LeaveCriticalSection(&amp;cs);
	i++;

	}
return 0;
}

DWORD WINAPI ThreadProc2(LPVOID lpParam){
	gemeinsamme_daten *p = (gemeinsamme_daten*) lpParam;
	int i(0);	
	while(true){
		 EnterCriticalSection(&amp;cs);
		for(int y(0); y &lt;= 5; y++){

			cout &lt;&lt; p-&gt;array[y];

		}
		LeaveCriticalSection(&amp;cs);
	i++;

	}
return 0;
}

// +---------------------------------------------------------------------------
// +  main - Methode
// +---------------------------------------------------------------------------

int main(void) 
{

	// HANDLES und VARIABLEN
	HANDLE hThread1, hThread2;
	DWORD dwThreadId1, dwThreadId2;
	DWORD wait1, wait2;
	InitializeCriticalSection(&amp;cs);

	hThread1 = CreateThread( 
		        NULL,              // default security attributes
			    0,                 // use default stack size  
		        ThreadProc1,        // thread function
			    (LPVOID) &amp;daten,             // argument to thread function
			    0,                 // use default creation flags
			    &amp;dwThreadId1);   // returns the thread identifier 

	hThread2 = CreateThread(
				NULL,              // default security attributes
				0,                 // use default stack size  
				ThreadProc2,        // thread function 
				(LPVOID) &amp;daten,    // argument to thread function 
				0,                 // use default creation flags 
				&amp;dwThreadId2);   // returns the thread identifier 

	while(true){
		if (_kbhit())break;
		Sleep(100);
	}	

	wait1 = WaitForSingleObject(
			 hThread1,
			 INFINITE
	);

	wait1 = WaitForSingleObject(
			 hThread2,
			 INFINITE
	);

// ENDE
	DeleteCriticalSection(&amp;cs);
	//DeleteCriticalSection(&amp;cs2);

	system(&quot;Pause&quot;);
     return 0;
}
</code></pre>
<p>Nun zu meinem Problem, ein Thread soll daten ins Array schreiben, der andere ausgeben. Jetzt war das ganze natürlich chaotisch, was ich mit CriticalSections entwirren wollte. Nur bricht er mir immer ab was mache ich falsch? Komplett fertig ist der code noch nicht aber die CriticalSections müssten schon gehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296881</guid><dc:creator><![CDATA[Laines]]></dc:creator><pubDate>Fri, 01 Jun 2007 19:32:17 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Fri, 01 Jun 2007 19:57:55 GMT]]></title><description><![CDATA[<p>Unter VC Express 05 und MSVC 6 läuft das o.P.<br />
CodeBlocks/mingw meckert über den Stack; setz mal in</p>
<pre><code class="language-cpp">hThread1 = CreateThread(
                NULL,              // default security attributes
                0,                 // use default stack size  
                ThreadProc1,        // thread function
                (LPVOID) &amp;daten,             // argument to thread function
                0,                 // use default creation flags
                &amp;dwThreadId1);   // returns the thread identifier
</code></pre>
<p>die Stacksize (2.Parameter ) händisch.</p>
<p>Sonst viellciht mal _beginthread, und _beginthreadex versuchen.</p>
<p>Grüsse</p>
<p>*this</p>
<p>P.S.: Interessantes Problem. Compiler? Version?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296891</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Fri, 01 Jun 2007 19:57:55 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Fri, 01 Jun 2007 20:18:05 GMT]]></title><description><![CDATA[<p>Microsoft Visual Studio Version 2005<br />
Version 8.0.50727.42</p>
<p>Installiert ist: Microsoft Visual C++ 2005</p>
<p>Ja wirklich seh interresant, ich wunder mich halt schon vor allem weil der code genau so in den unterlagen steht. Hab auch schon viele andere Kombinationen probiert, brachte aber immer einen Fehler</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296900</guid><dc:creator><![CDATA[Laines]]></dc:creator><pubDate>Fri, 01 Jun 2007 20:18:05 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Fri, 01 Jun 2007 20:19:11 GMT]]></title><description><![CDATA[<p>Was bricht wo bei Dir?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296901</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Fri, 01 Jun 2007 20:19:11 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Fri, 01 Jun 2007 20:24:43 GMT]]></title><description><![CDATA[<p>Er gibt ein paar Zahlen aus, dann schlägt der Just-in-time-Debugger zu. Sprich während der Laufzeit bricht er ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296904</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296904</guid><dc:creator><![CDATA[Laines]]></dc:creator><pubDate>Fri, 01 Jun 2007 20:24:43 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Fri, 01 Jun 2007 20:30:25 GMT]]></title><description><![CDATA[<p>Ändere '&lt;= 5' in '&lt; 5' damit der Code richtig ist, dann geht er auch.<br />
So wie du es machst überschreibst du evtl. (je nach Compiler) einen Teil der CRITICAL_SECTION beim Zugriff auf das nicht vorhandene Element mit Index 5 (=das 6. Element).</p>
<p>EDIT: und ja, du solltest _beginthreadex verwenden statt CreateThread. Und die Stacksize mit 0 ist schon OK, 0 an der Stelle heisst einfach &quot;Defaultwert bitte&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296907</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 01 Jun 2007 20:30:25 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Fri, 01 Jun 2007 20:37:11 GMT]]></title><description><![CDATA[<p>Laines schrieb:</p>
<blockquote>
<p>Er gibt ein paar Zahlen aus, dann schlägt der Just-in-time-Debugger zu. Sprich während der Laufzeit bricht er ab.</p>
</blockquote>
<p>Joh, jetzt seh ich es auch <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1296916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296916</guid><dc:creator><![CDATA[Jochen Kalmbach]]></dc:creator><pubDate>Fri, 01 Jun 2007 20:37:11 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Fri, 01 Jun 2007 20:37:13 GMT]]></title><description><![CDATA[<p>Hi danke für die Hilfe! Jetzt funktioniert es... <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>Als Ausgabe bekomme ich jetzt:</p>
<p>325160<br />
325160<br />
325160<br />
325160<br />
325160<br />
972815<br />
972815<br />
972815<br />
972815<br />
972815<br />
1612520<br />
1612520<br />
1612520<br />
1612520<br />
1612520<br />
2257895<br />
2257895<br />
2257895<br />
2257895<br />
2257895<br />
2886293<br />
2886293<br />
2886293<br />
2886293<br />
2886293<br />
3514801<br />
3514801<br />
3514801<br />
3514801<br />
3514801<br />
4119651<br />
4119651<br />
4119651<br />
4119651<br />
4119651<br />
4758877<br />
4758877<br />
4758877<br />
4758877<br />
4758877<br />
5403220<br />
5403220<br />
5403220<br />
5403220<br />
5403220<br />
6055197<br />
6055197<br />
6055197<br />
6055197<br />
6055197<br />
6697034<br />
6697034<br />
6697034<br />
6697034<br />
6697034<br />
7343790<br />
7343790<br />
7343790<br />
7343790<br />
7343790<br />
7974854<br />
7974854<br />
7974854<br />
7974854<br />
7974854</p>
<p>Sollte da jetzt nicht aber sowas stehen:</p>
<p>111111<br />
222222<br />
333333<br />
444444<br />
444444 --&gt; Wiederholungen könnten ja vorkommen mangels synchronisation<br />
555555</p>
<p>Ich muss mir CreateThread arbeiten ist in der Aufgabe gefordert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296917</guid><dc:creator><![CDATA[Laines]]></dc:creator><pubDate>Fri, 01 Jun 2007 20:37:13 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Fri, 01 Jun 2007 20:47:38 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Ändere '&lt;= 5' in '&lt; 5' damit der Code richtig ist, dann geht er auch.</p>
</blockquote>
<p>Da bin ich ja voll auf den Leim getrampelt... <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>
<p>hustbaer schrieb:</p>
<blockquote>
<p>So wie du es machst überschreibst du evtl. (je nach Compiler) einen Teil der CRITICAL_SECTION beim Zugriff auf das nicht vorhandene Element mit Index 5 (=das 6. Element).</p>
<p>EDIT: und ja, du solltest _beginthreadex verwenden statt CreateThread. Und die Stacksize mit 0 ist schon OK, 0 an der Stelle heisst einfach &quot;Defaultwert bitte&quot;.</p>
</blockquote>
<p>Dabei hatte ich solch einen &quot;schönen&quot; RT-Fehler beim &quot;Clonen&quot; des Stacks vermutet.</p>
<p>Wie war das &quot;KISS&quot; oder so ähnlich... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1296921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296921</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Fri, 01 Jun 2007 20:47:38 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Fri, 01 Jun 2007 22:01:21 GMT]]></title><description><![CDATA[<p>Ich hab's auch erst beim Durchsteppen gesehen <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>@Laines: der Output ist doch eh korrekt. Dadurch dass du keine Pause zwischen &quot;unlock&quot; und &quot;lock&quot; hast wird es ziemlich unvorhersehbar wann der Besitzer der CRITICAL_SECTION wechselt.<br />
Wenn du das synchronisieren willst so dass erst Thread1 einmal drankommt zum Zählen, dann Thread2 einmal zum ausgeben, dann wieder 1 etc. - dann musst du EVENTs oder schlimmeres verwenden <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1296946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296946</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 01 Jun 2007 22:01:21 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Sat, 02 Jun 2007 12:17:03 GMT]]></title><description><![CDATA[<p>Hier erstmal der Code wie weit er jetzt ist:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;windows.h&gt;
#include &lt;conio.h&gt;
#include &lt;process.h&gt;
#include &lt;stdio.h&gt;

using namespace std;

// Gemeinsamme struktur
struct gemeinsamme_daten{
	int array[5];
};

// Object von Gemeinsamer Struktur
 gemeinsamme_daten daten;

// Erstellen der Critical section
 CRITICAL_SECTION cs;

// Event erzeugen
 HANDLE hEvent = CreateEvent( 
        NULL,         // default security attributes
        TRUE,         // manual-reset event
        FALSE,         // initial state is non signaled
        &quot;Event&quot;  // object name
        ); 

// Funktion zum ersten Thread
DWORD WINAPI ThreadProc1(LPVOID lpParam){
	gemeinsamme_daten *p = (gemeinsamme_daten*) lpParam;
	int i(0);
	while(true){
	EnterCriticalSection(&amp;cs);
		for(int y(0); y &lt; 5; y++){
		p-&gt;array[y] = i;
		}
	i++;
	LeaveCriticalSection(&amp;cs);
	}
return 0;
}

// Funktion zum zweiten Thread
DWORD WINAPI ThreadProc2(LPVOID lpParam){
	gemeinsamme_daten *p = (gemeinsamme_daten*) lpParam;
	int i(0);	
	while(true){
	EnterCriticalSection(&amp;cs);
		for(int y(0); y &lt; 5; y++){
		cout &lt;&lt; p-&gt;array[y] &lt;&lt; endl;
		}
	i++;
	LeaveCriticalSection(&amp;cs);
	}
return 0;
}

// +---------------------------------------------------------------------------
// +  main - Methode
// +---------------------------------------------------------------------------

int main(void) 
{

	// HANDLES und VARIABLEN
	HANDLE hThread1, hThread2;
	DWORD dwThreadId1, dwThreadId2;
	DWORD wait1, wait2;
	InitializeCriticalSection(&amp;cs);

	hThread1 = CreateThread( 
		        NULL,              // default security attributes
			    0,                 // use default stack size  
		        ThreadProc1,        // thread function
			    (LPVOID) &amp;daten,             // argument to thread function
			    0,                 // use default creation flags
			    &amp;dwThreadId1);   // returns the thread identifier 

	hThread2 = CreateThread(
				NULL,              // default security attributes
				0,                 // use default stack size  
				ThreadProc2,        // thread function 
				(LPVOID) &amp;daten,    // argument to thread function 
				0,                 // use default creation flags 
				&amp;dwThreadId2);   // returns the thread identifier 

	while(true){
		if (_kbhit()){
			SetEvent( hEvent );
			break;
		}

		Sleep(100);
	}	

	wait1 = WaitForSingleObject(
			 hThread1,
			 INFINITE
	);

	wait2 = WaitForSingleObject(
			 hThread2,
			 INFINITE
	);

// ENDE
	DeleteCriticalSection(&amp;cs);

	system(&quot;Pause&quot;);
     return 0;
}
</code></pre>
<p>Könnte mir jemand zeigen wie ich folgendes realisieren kann:<br />
Ich möchte, das nach einem Tastendruck (_kbhit()) von der main aus beide Threads geordnet beendet werden. Das ganze soll mittels Events geschehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297107</guid><dc:creator><![CDATA[Laines]]></dc:creator><pubDate>Sat, 02 Jun 2007 12:17:03 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Sat, 02 Jun 2007 12:25:59 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">if(WaitForSingleObject(hEvent,0)==WAIT_TIMEOUT)
  break;
</code></pre>
<p>^^ das da mußt du an geeigneter Stelle in die Hauptschleife bieder Threads einbauen, um auf deine SetEvent() reagieren zu können. (der beste Platz ist zwischen dem LeaveCriticalSection() und dem Schleifenabschluß)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297113</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 02 Jun 2007 12:25:59 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Sat, 02 Jun 2007 14:49:55 GMT]]></title><description><![CDATA[<p>Wenn ich es so mache gibt er mir 00000 aus und bleibt dann stehen obwohl ich keine taste gedrückt habe...</p>
<pre><code class="language-cpp">if(WaitForSingleObject(hEvent,0)==WAIT_TIMEOUT)
  break;
</code></pre>
<p>Das abbuch Kriterium soll aber auch nicht ein time out sondern des hEvent sein was gesignald wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297176</guid><dc:creator><![CDATA[Laines]]></dc:creator><pubDate>Sat, 02 Jun 2007 14:49:55 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Sat, 02 Jun 2007 14:52:42 GMT]]></title><description><![CDATA[<p>Nachtrag:</p>
<pre><code class="language-cpp">if(WaitForSingleObject(hEvent,INFINITE)==WAIT_OBJECT_0)
	break;
</code></pre>
<p>Damit erziele ich komischerweise das gleiche Ergebnis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297179</guid><dc:creator><![CDATA[Laines]]></dc:creator><pubDate>Sat, 02 Jun 2007 14:52:42 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Sun, 03 Jun 2007 04:56:19 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// im Hauptprogramm, vor anlegen der Threads:
hEvent = ::CreateEvent(0, true, 0, 0);
if (!hEvent)
{
    std::cout &lt;&lt; &quot;Dah, nix mit Event!&quot; &lt;&lt; std::endl;
    return 1;
}

// in der Schleife:
if (::WaitForSingleObject(hEvent, 0) == WAIT_OBJECT_0)
    break;

// im Hauptprogramm nach dem Warten auf nen Tastendruck:
::SetEvent(hEvent);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1297529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297529</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 03 Jun 2007 04:56:19 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Sun, 03 Jun 2007 13:23:39 GMT]]></title><description><![CDATA[<p>Danke jetzt geht es!</p>
<p>Jetzt hab ich aber noch eine Frage.</p>
<pre><code class="language-cpp">WaitForSingleObject(hEvent, 0)
</code></pre>
<p>Was bewirt hier die 0. Und warum geht INFINITE (keine zeit Beschränkung) nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1297734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1297734</guid><dc:creator><![CDATA[Laines]]></dc:creator><pubDate>Sun, 03 Jun 2007 13:23:39 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Mon, 04 Jun 2007 00:29:32 GMT]]></title><description><![CDATA[<p>Die 0 ist die max. Wartezeit, und INFINITE führt dazu dass &quot;ewig&quot; gewartet wird, d.h. die Funktion kehrt erst zurück wenn das Objekt &quot;signaled&quot; ist.<br />
Da du an der Stelle nur abfragen willst ob es signaled ist und nicht warten übergibst du eben 0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298168</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 04 Jun 2007 00:29:32 GMT</pubDate></item><item><title><![CDATA[Reply to CriticalSection in Threads on Mon, 04 Jun 2007 21:05:21 GMT]]></title><description><![CDATA[<p>@Laines:<br />
Kannst du noch einmal den gesamten Code posten, mit dem Beenden duch Tastendruck?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298927</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298927</guid><dc:creator><![CDATA[MisterX]]></dc:creator><pubDate>Mon, 04 Jun 2007 21:05:21 GMT</pubDate></item></channel></rss>