<?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[Multithreading - Programm absturz]]></title><description><![CDATA[<p>Moin,<br />
bin grade dabei mich mit Multithreading zu beschäftigen.<br />
Hier mein Code:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;windows.h&gt;

void thread();

int main(int argc, char *argv[])
{
  HANDLE thread;
  DWORD id;
  int i,index;
   i++;
   thread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)thread,(LPVOID)i,0,&amp;id); 

  system(&quot;PAUSE&quot;);	
  return 0;
}

void thread()  {
     int index;
       for (index=0; index&lt;100; index++) 
   { 
      printf(&quot;%d&quot;,index);
      Sleep(1000); 
   } 

}
</code></pre>
<p>Programm gibt mir noch folgendes aus:</p>
<pre><code>Drücken sie eine beliebige Taste...
</code></pre>
<p>Und dann stürtzt des Programm auch schon ab.<br />
Was mach ich verkehrt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/239265/multithreading-programm-absturz</link><generator>RSS for Node</generator><lastBuildDate>Mon, 06 Apr 2026 14:31:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/239265.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 Apr 2009 14:54:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Multithreading - Programm absturz on Tue, 21 Apr 2009 14:54:46 GMT]]></title><description><![CDATA[<p>Moin,<br />
bin grade dabei mich mit Multithreading zu beschäftigen.<br />
Hier mein Code:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;windows.h&gt;

void thread();

int main(int argc, char *argv[])
{
  HANDLE thread;
  DWORD id;
  int i,index;
   i++;
   thread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)thread,(LPVOID)i,0,&amp;id); 

  system(&quot;PAUSE&quot;);	
  return 0;
}

void thread()  {
     int index;
       for (index=0; index&lt;100; index++) 
   { 
      printf(&quot;%d&quot;,index);
      Sleep(1000); 
   } 

}
</code></pre>
<p>Programm gibt mir noch folgendes aus:</p>
<pre><code>Drücken sie eine beliebige Taste...
</code></pre>
<p>Und dann stürtzt des Programm auch schon ab.<br />
Was mach ich verkehrt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699193</guid><dc:creator><![CDATA[Multitaks]]></dc:creator><pubDate>Tue, 21 Apr 2009 14:54:46 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Tue, 21 Apr 2009 15:14:46 GMT]]></title><description><![CDATA[<p>Du hast i schonmal nicht initialisiert...</p>
<p>EDIT: Ähm, und dein Thread-Handle darf nicht denselben Bezeichner haben wie die Thread-Funktion! Du benennst ja auch nicht 2 Variablen mit demselben Namen. Änder dein HANDLE thread in hThread, dann sollte es klappen.</p>
<p>EDIT2: Und lies dir das bitte mal durch:</p>
<p><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></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699210</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 21 Apr 2009 15:14:46 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Tue, 21 Apr 2009 15:24:15 GMT]]></title><description><![CDATA[<p>Ok danke hat geklappt.</p>
<blockquote>
<p>Vermeide CreateThread, wenn Du CRT Funktionen verwendest, das erzeugt Leaks in der CRT.<br />
Verwende deshalb immer nur _beginthread(ex). :!:</p>
</blockquote>
<p>Des war ja nur en Test Projekt.<br />
Will dann später im richtigen Projekt in dem Thread mit API's arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699217</guid><dc:creator><![CDATA[Multitaks]]></dc:creator><pubDate>Tue, 21 Apr 2009 15:24:15 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Tue, 21 Apr 2009 15:26:19 GMT]]></title><description><![CDATA[<p>Sry für den doppelpost aber welche Funktionen betreffen den diesen Artikel?<br />
Mit sprintf,memset und so kann man doch arbeiten odeR?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699219</guid><dc:creator><![CDATA[Multitaks]]></dc:creator><pubDate>Tue, 21 Apr 2009 15:26:19 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Tue, 21 Apr 2009 16:01:22 GMT]]></title><description><![CDATA[<p>Multitaks schrieb:</p>
<blockquote>
<p>Sry für den doppelpost aber welche Funktionen betreffen den diesen Artikel?<br />
Mit sprintf,memset und so kann man doch arbeiten odeR?</p>
</blockquote>
<p>Eben nicht. Nimm einfach _beginthreadex...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699247</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Tue, 21 Apr 2009 16:01:22 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Tue, 21 Apr 2009 18:24:51 GMT]]></title><description><![CDATA[<p>Multitaks schrieb:</p>
<blockquote>
<p>Des war ja nur en Test Projekt.<br />
Will dann später im richtigen Projekt in dem Thread mit API's arbeiten.</p>
</blockquote>
<p>Ja mach's erst falsch, weil wenn drauf ankommt machst du's ja richtig. Oh Mann, bei soviel Ignoranz fehlen einem ja echt die Worte. Btw, <strong>(LPVOID)i</strong> ist totaler Schwachsinn, weil deine Funktion <strong>void thread()</strong> überhaupt keine Paramter erwartet. Und jetzt nimm endlich das verdammte <strong>_beginthreadex</strong> und stell deine Projekteinstellungen auf <strong>Multithreaded (/MT)</strong> (falls du einen MS Compiler benutzt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1699332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1699332</guid><dc:creator><![CDATA[.......]]></dc:creator><pubDate>Tue, 21 Apr 2009 18:24:51 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Thu, 23 Apr 2009 20:44:02 GMT]]></title><description><![CDATA[<p>Erhalte mit &quot;_beginthreadex&quot; folgende Fehlermeldung:</p>
<pre><code>Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
test.obj : error LNK2001: unresolved external symbol __beginthreadex
Debug/Test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1700452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700452</guid><dc:creator><![CDATA[Multitaks]]></dc:creator><pubDate>Thu, 23 Apr 2009 20:44:02 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Thu, 23 Apr 2009 20:56:44 GMT]]></title><description><![CDATA[<p>Linkst du auch gegen die Multithreaded Runtime-Library?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700459</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 23 Apr 2009 20:56:44 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Fri, 24 Apr 2009 07:18:01 GMT]]></title><description><![CDATA[<p>Multitaks schrieb:</p>
<blockquote>
<p>Erhalte mit &quot;_beginthreadex&quot; folgende Fehlermeldung:</p>
<pre><code>Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.
test.obj : error LNK2001: unresolved external symbol __beginthreadex
Debug/Test.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.
</code></pre>
</blockquote>
<p>Hier ein auszug aus <strong>process.h</strong></p>
<pre><code class="language-cpp">/* function prototypes */
#ifdef  _MT
_CRTIMP unsigned long  __cdecl _beginthread (void (__cdecl *) (void *),
        unsigned, void *);
_CRTIMP void __cdecl _endthread(void);
_CRTIMP unsigned long __cdecl _beginthreadex(void *, unsigned,
        unsigned (__stdcall *) (void *), void *, unsigned, unsigned *);
_CRTIMP void __cdecl _endthreadex(unsigned);
#endif
</code></pre>
<p>Es ist ersichtlich, dass der Compiler <strong>_beginthreadex</strong> nur dann erkennt wenn <strong>_MT</strong> definiert ist, also guggst mal oben was ich da geschrieben habe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700545</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700545</guid><dc:creator><![CDATA[.......]]></dc:creator><pubDate>Fri, 24 Apr 2009 07:18:01 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Fri, 24 Apr 2009 07:28:26 GMT]]></title><description><![CDATA[<p>Du scheinst ja noch VS6 zu nutzten, also so gehts:<br />
<a href="http://www.bild-upload.net/archiv.php?bild=14275&amp;bild_name=bild1PQT2L.jpg" rel="nofollow">Projekt settings</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700549</guid><dc:creator><![CDATA[.......]]></dc:creator><pubDate>Fri, 24 Apr 2009 07:28:26 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Fri, 24 Apr 2009 11:43:55 GMT]]></title><description><![CDATA[<p>Ok danke für die Antwort hat geholfen.<br />
Jetzt neuer Fehler:</p>
<pre><code>D:\Privat\Test.c(83) : warning C4047: 'function' : 'unsigned int (__stdcall *)(void *)' differs in levels of indirection from 'int '
D:\Privat\Test.c(83) : warning C4024: '_beginthreadex' : different types for formal and actual parameter 3
D:\Privat\Test.c(83) : warning C4047: '=' : 'void *' differs in levels of indirection from 'unsigned long '
</code></pre>
<p>Hier der Aufruf:</p>
<pre><code class="language-cpp">thread = _beginthreadex (NULL,0,irc_start(),NULL,0,&amp;id);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1700678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700678</guid><dc:creator><![CDATA[Multitaks]]></dc:creator><pubDate>Fri, 24 Apr 2009 11:43:55 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Fri, 24 Apr 2009 12:18:48 GMT]]></title><description><![CDATA[<p>Multitaks schrieb:</p>
<blockquote>
<pre><code class="language-cpp">thread = _beginthreadex (NULL,0,irc_start(),NULL,0,&amp;id);
</code></pre>
</blockquote>
<pre><code class="language-cpp">thread = _beginthreadex (NULL,0,(void *)irc_start, NULL,0,&amp;id);
</code></pre>
<p>keine Klammern bei irc_start, dafür aber mit (void <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="😉"
    /> casten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700692</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700692</guid><dc:creator><![CDATA[.......]]></dc:creator><pubDate>Fri, 24 Apr 2009 12:18:48 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Fri, 24 Apr 2009 13:56:32 GMT]]></title><description><![CDATA[<p>Noch die Erklärung: Wenn du die Klammern hinter deinen Funktionsnamen stellst, dann ist das ein Funktionsaufruf (es würde also die Rückgabe der Funktion an _beginthreadex übergeben). Du willst aber einen Zeiger auf die Funktion übergeben, dass stellt der Name ohne Klammern dar. Und da _beginthreadex einen void-Pointer haben will, castest du entsprechend, und alles ist in Butter! <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/1700747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700747</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Fri, 24 Apr 2009 13:56:32 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Fri, 24 Apr 2009 19:23:44 GMT]]></title><description><![CDATA[<p>Wieder Fehlermeldung:</p>
<pre><code class="language-cpp">warning C4047: '=' : 'void *' differs in levels of indirection from 'unsigned long '
</code></pre>
<p>-.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700900</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700900</guid><dc:creator><![CDATA[Multitaks]]></dc:creator><pubDate>Fri, 24 Apr 2009 19:23:44 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Fri, 24 Apr 2009 20:44:27 GMT]]></title><description><![CDATA[<p>Multitaks schrieb:</p>
<blockquote>
<p>cpp]<br />
#include &lt;stdio.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;windows.h&gt;</p>
<p>void thread();</p>
<p>int main(int argc, char *argv[])<br />
{<br />
HANDLE thread;<br />
DWORD id;<br />
int i,index;<br />
i++;<br />
thread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)thread,(LPVOID)i,0,&amp;id);</p>
<p>system(&quot;PAUSE&quot;);<br />
return 0;<br />
}</p>
<p>void thread() {<br />
int index;<br />
for (index=0; index&lt;100; index++)<br />
{<br />
printf(&quot;%d&quot;,index);<br />
Sleep(1000);<br />
}</p>
<p>}<br />
[/cpp]</p>
</blockquote>
<p>Mann du bist ein Spezi, du bennenst <strong>HANDLE thread;</strong> und dann gibt es da auch noch die Funktion <strong>thread</strong>. Is wohl klar das dann mal nicht geht. Lerne erstmal den Funktionen Namen zu geben die auch irgendwie der Funktionsweise der Funktion entsprechen. Man nennt auch keine Funktion <strong>öffne_Wasserhahn(..)</strong> wenn man damit das Licht anschalten will.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700935</guid><dc:creator><![CDATA[.......]]></dc:creator><pubDate>Fri, 24 Apr 2009 20:44:27 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Sat, 25 Apr 2009 11:13:53 GMT]]></title><description><![CDATA[<p>Multitaks schrieb:</p>
<blockquote>
<p>Wieder Fehlermeldung:</p>
<pre><code class="language-cpp">warning C4047: '=' : 'void *' differs in levels of indirection from 'unsigned long '
</code></pre>
<p>-.-</p>
</blockquote>
<p>Des ist eigentlich des aktuelle Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701086</guid><dc:creator><![CDATA[Multitask]]></dc:creator><pubDate>Sat, 25 Apr 2009 11:13:53 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Sun, 26 Apr 2009 16:24:46 GMT]]></title><description><![CDATA[<p>Ok komme jetzt eigentlich mit der Funktion ganz gut klar.</p>
<blockquote>
<p>Wenn du die Klammern hinter deinen Funktionsnamen stellst, dann ist das ein Funktionsaufruf (es würde also die Rückgabe der Funktion an _beginthreadex übergeben). Du willst aber einen Zeiger auf die Funktion übergeben, dass stellt der Name ohne Klammern dar.</p>
</blockquote>
<p>Stimmt nicht.<br />
Lasse ich die Klammern hintern dem Funktionsnamen weg dann wird die Funktion nicht aufgerufen.<br />
Schreibe ich die Klammern hintern den Funktionsnamen dann läuft alles glatt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701562</guid><dc:creator><![CDATA[Multitask]]></dc:creator><pubDate>Sun, 26 Apr 2009 16:24:46 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Mon, 27 Apr 2009 05:34:04 GMT]]></title><description><![CDATA[<p>Dann zeig mal deinen Aufruf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1701776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1701776</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Mon, 27 Apr 2009 05:34:04 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Mon, 27 Apr 2009 17:06:29 GMT]]></title><description><![CDATA[<pre><code>thread = _beginthreadex (NULL,0,(void *)irc_start, NULL,0,&amp;id);
</code></pre>
<p>Da passiert irgendwie nix.<br />
Mache ich es aber so:</p>
<pre><code>thread = _beginthreadex (NULL,0,(void *)irc_start(), NULL,0,&amp;id);
</code></pre>
<p>Klappt es komischer weiße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702161</guid><dc:creator><![CDATA[Multitask]]></dc:creator><pubDate>Mon, 27 Apr 2009 17:06:29 GMT</pubDate></item><item><title><![CDATA[Reply to Multithreading - Programm absturz on Mon, 27 Apr 2009 17:30:20 GMT]]></title><description><![CDATA[<blockquote>
<p>Klappt es komischer weiße</p>
</blockquote>
<p>Fragt sich bloss was <em>es</em> ist. Wenn Du damit den Funktionsaufruf von irc_start() meinst, stimmt. Es klappt. Jedoch nicht auf einem neuen Thread.<br />
(Lässt sich leicht mit GetCurrentThreadId() überprüfen.</p>
<p>Werde Dir ein Mini Bsp. schreiben.. ich kann das nicht mehr mitansehen...<br />
Simon</p>
<p>Edit:<br />
Hier das Bsp:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &lt;tchar.h&gt;
#include &lt;process.h&gt;
#include &lt;windows.h&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;

///////////////////////////////////////////////////////////////////////////////

void printCurrentThreadId(const std::wstring&amp; msg)
{
	std::wostringstream oss;
	oss &lt;&lt; msg &lt;&lt; L&quot;, Thread Id = &quot; &lt;&lt; GetCurrentThreadId() &lt;&lt; std::endl;
	OutputDebugStringW(oss.str().c_str());
}

///////////////////////////////////////////////////////////////////////////////

unsigned int __stdcall threadProc(void* /*arg*/)
{
	printCurrentThreadId(L&quot;threadProc(..)&quot;);
	return 0;
}

///////////////////////////////////////////////////////////////////////////////

int _tmain(int /*argc*/, _TCHAR* /*argv*/[])
{
	printCurrentThreadId(L&quot;_tmain(..)&quot;);

	unsigned int threadId = 0;
	HANDLE threadHandle = reinterpret_cast&lt;HANDLE&gt;(_beginthreadex(0, 0, &amp;threadProc, 0, 0, &amp;threadId));

	// Warte bis der neue Thread beendet wurde.
	WaitForSingleObject(threadHandle, INFINITE);
	CloseHandle(threadHandle);
}

///////////////////////////////////////////////////////////////////////////////
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1702174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702174</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Mon, 27 Apr 2009 17:30:20 GMT</pubDate></item></channel></rss>