<?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[Wie erstell ich einen Thread?]]></title><description><![CDATA[<p>abend, ich habe vor einen kleinen timer in mein prog einzubauen( nur Sekunden), das problem ist das ich waernd der timer läuft noch andere aktionen machen will, also schliesse ich darauf das ich den timer als thread erstellen sollte. mein problem ist ich habe keine ahnung wie es geht <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="😕"
    /><br />
ich habe mir jetzt schon ein paar tuts dazu reingezogen aber irgendwie funktioniert da immer irgendwas nicht.</p>
<p>HANDLE hThread = CreateThread(NULL, 0, ThreadProc, &amp;Param, 0, &amp;ThreadId);<br />
// das erstllt mir nen thread</p>
<p>doch dann meckert mein compi:</p>
<pre><code>[C++ Error] API_test.cpp(42): E2451 Undefined symbol 'ThreadProc'
[C++ Error] API_test.cpp(42): E2451 Undefined symbol 'Param'
[C++ Error] API_test.cpp(42): E2451 Undefined symbol 'ThreadId'
</code></pre>
<p>hmmm, also ich moechte es so basteln das, ich 3button habe<br />
1. -&gt; &quot;Start&quot; soll den timer starten<br />
2. -&gt; &quot;Stop&quot; soll den timer stopen<br />
3. -&gt; &quot;Reset&quot; soll den timer zurueck auf 0 setzen</p>
<p>könntet ihr mir helfen, waer cool, danke schonmal.</p>
<p>Gruß Tobi :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168538/wie-erstell-ich-einen-thread</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Jul 2026 04:19:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168538.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 Dec 2006 22:09:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Wie erstell ich einen Thread? on Sat, 23 Dec 2006 22:09:01 GMT]]></title><description><![CDATA[<p>abend, ich habe vor einen kleinen timer in mein prog einzubauen( nur Sekunden), das problem ist das ich waernd der timer läuft noch andere aktionen machen will, also schliesse ich darauf das ich den timer als thread erstellen sollte. mein problem ist ich habe keine ahnung wie es geht <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="😕"
    /><br />
ich habe mir jetzt schon ein paar tuts dazu reingezogen aber irgendwie funktioniert da immer irgendwas nicht.</p>
<p>HANDLE hThread = CreateThread(NULL, 0, ThreadProc, &amp;Param, 0, &amp;ThreadId);<br />
// das erstllt mir nen thread</p>
<p>doch dann meckert mein compi:</p>
<pre><code>[C++ Error] API_test.cpp(42): E2451 Undefined symbol 'ThreadProc'
[C++ Error] API_test.cpp(42): E2451 Undefined symbol 'Param'
[C++ Error] API_test.cpp(42): E2451 Undefined symbol 'ThreadId'
</code></pre>
<p>hmmm, also ich moechte es so basteln das, ich 3button habe<br />
1. -&gt; &quot;Start&quot; soll den timer starten<br />
2. -&gt; &quot;Stop&quot; soll den timer stopen<br />
3. -&gt; &quot;Reset&quot; soll den timer zurueck auf 0 setzen</p>
<p>könntet ihr mir helfen, waer cool, danke schonmal.</p>
<p>Gruß Tobi :xmas1:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1197192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197192</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Sat, 23 Dec 2006 22:09:01 GMT</pubDate></item><item><title><![CDATA[Reply to Wie erstell ich einen Thread? on Sat, 23 Dec 2006 22:14:16 GMT]]></title><description><![CDATA[<p>Hey Tobi, erklär mir mal, wie du deinen Timer programmiert hast. Mit Sleep () ? Oder etwa mit API - Funktionen ?</p>
<p>//Edit:</p>
<blockquote>
<p>hmmm, also ich moechte es so basteln das, ich 3button habe<br />
1. -&gt; &quot;Start&quot; soll den timer starten<br />
2. -&gt; &quot;Stop&quot; soll den timer stopen<br />
3. -&gt; &quot;Reset&quot; soll den timer zurueck auf 0 setzen</p>
</blockquote>
<p>Achso, und damit kenne ich mich leider nicht sehr aus <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="😃"
    /> Musst du mal die anderen fragen.</p>
<p>MfG mikey.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1197193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197193</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Sat, 23 Dec 2006 22:14:16 GMT</pubDate></item><item><title><![CDATA[Reply to Wie erstell ich einen Thread? on Sat, 23 Dec 2006 23:00:44 GMT]]></title><description><![CDATA[<p>Am besten Du erstellst den Timer mit SetTimer. Unter dem Message-Handler für WM_TIMER startest Du dann den Thread mit:</p>
<pre><code class="language-cpp">// Hinweis: Du musst in Deinen Compiler-Settings noch Multithreading aktivieren!
#include &lt;Process&gt;

typedef struct
{
  // Hier die Variablen die Du Deinem Thread übergeben willst...
  // Beispiel:
  int iValue;

} SThreadData;

// Die Strukturvariable muss im Thread noch existieren:
static SThreadData ThreadData;
unsigned int uiThreadID; // Die ID wird manchmal für best. Funktionen benötigt
// Initialisieren:
ThreadData.iValue = 20; // (Beispielwert)
HANDLE hThread = reinterpret_cast&lt;HANDLE&gt;(_beginthreadex(NULL, 0, ThreadProc, &amp;ThreadData, NULL, &amp;uiThreadID));

// ThreadProc ist eine von Dir definierte Funktion, die z.B.: so aussehen könnte:
unsigned __stdcall ThreadProc(void* pvThreadData)
{
   // Hier irgendwas machen ;-) ...
   // ...

   // Und Verlassen:
   _endthreadex(0); // Exit-Code: 0
   return (0);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1197204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197204</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sat, 23 Dec 2006 23:00:44 GMT</pubDate></item><item><title><![CDATA[Reply to Wie erstell ich einen Thread? on Sat, 23 Dec 2006 22:53:28 GMT]]></title><description><![CDATA[<p>gibts net auch noch ne etwas einfachere variante? und was macht _stdcall?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1197207</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197207</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Sat, 23 Dec 2006 22:53:28 GMT</pubDate></item><item><title><![CDATA[Reply to Wie erstell ich einen Thread? on Sun, 24 Dec 2006 01:36:18 GMT]]></title><description><![CDATA[<p>__stdcall ist eine Aufrufkonvention, die dem Compiler mitteilt wie er den Funktionsufruf durchführen soll bzw mit den Parametern der Funktion umgehen soll.</p>
<p>[ <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="😃"
    /> Sauerei <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/1197210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197210</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 24 Dec 2006 01:36:18 GMT</pubDate></item><item><title><![CDATA[Reply to Wie erstell ich einen Thread? on Sun, 24 Dec 2006 00:36:22 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12048">@CodeFinder</a>: Ich geb dir nen Tipp: schreib mal ordentlichen Code...</p>
<pre><code class="language-cpp">DWORD WINAPI ThreadProc(
  LPVOID lpParameter
);
</code></pre>
<p>sollte im Moment die Struktur von einer ThreadProc sein..</p>
<p>d.h. hier mal der Link zum MSDN Artikel zum Thema Threads: <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_threads.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_threads.asp</a></p>
<p>um dir den Code der da ist nen wenig leichter zu machen:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;windows.h&gt;

typedef struct _thread_param_t_ 
{
    unsigned int   nParam1;
    unsigned short sParam2;
} THREADPARAM, *LPTHREADPARAM;

DWORD WINAPI ThreadProc(LPVOID lpParam) 
{ 
    LPTHREADPARAM lpThreadParam = reinterpret_cast&lt;LPTHREADPARAM&gt;(lpParam);
    std::cout &lt;&lt;&quot;Param 1: &quot; &lt;&lt; lpThreadParam-&gt;sParam2 &lt;&lt; &quot; || Param 2: &quot; &lt;&lt; lpThreadParam-&gt;nParam1 &lt;&lt; std::endl;

    return 0; 
} 

int main(void)
{
    THREADPARAM threadparam;
    DWORD  dwThreadId = 0;
    HANDLE hThread = NULL; 

    threadparam.nParam1 = 10;
    threadparam.sParam2 = 100;

    hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadProc, (LPVOID)&amp;threadparam, 0, &amp;dwThreadId);

    if (hThread == NULL) 
    {
        std::cout &lt;&lt; &quot;Thread konnte nicht erstellt werden!&quot; &lt;&lt; std::endl;
        return 0;
    }

    std::cout &lt;&lt; &quot;Thread aufgerufen. Warte auf Thread &quot; &lt;&lt; dwThreadId &lt;&lt; &quot;...&quot; &lt;&lt; std::endl;

    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1197228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197228</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 24 Dec 2006 00:36:22 GMT</pubDate></item><item><title><![CDATA[Reply to Wie erstell ich einen Thread? on Sun, 24 Dec 2006 01:31:50 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12048">@CodeFinder</a>: Ich geb dir nen Tipp: schreib mal ordentlichen Code...</p>
<pre><code class="language-cpp">DWORD WINAPI ThreadProc(
  LPVOID lpParameter
);
</code></pre>
<p>sollte im Moment die Struktur von einer ThreadProc sein..</p>
</blockquote>
<p>LOL!, Wohl zu viel MFC programmiert wa ? <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>Nop nicht unbedingt (siehe Kontext!):<br />
<a href="http://msdn2.microsoft.com/en-us/library/kdzttdcb.aspx" rel="nofollow">_beginthread, _beginthreadex (MSDN)</a><br />
Ich zitiere <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>
<blockquote>
<pre><code>[...]
unsigned ( *start_address )( void * ),
[...]
</code></pre>
</blockquote>
<p>PS: Deinen <em>reinterpret_cast</em> kannst und solltest Du gegen einen <em>static_cast</em> tauschen; mein ja nur wegen &quot;schreib mal ordentlichen Code...&quot; :xmas2:</p>
<p>PS-2 &amp; EDIT: Wenn Du unbedingt <em>CreateThread</em> verwenden willst (was ich extra NICHT getan habe), kannst Du auch gleich <em>_beginthread</em> nehmen, das Makro ist IMHO noch leichter zu verstehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /> , da wie sich in Deinem Beispiel ja auch zeigt, die meisten Parameter sowieso auf Standardwerte gesetzt werden <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="🤡"
    /> (genau das tut das Makro).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1197242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197242</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 24 Dec 2006 01:31:50 GMT</pubDate></item><item><title><![CDATA[Reply to Wie erstell ich einen Thread? on Sun, 24 Dec 2006 15:39:34 GMT]]></title><description><![CDATA[<p>[...]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1197244</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197244</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 24 Dec 2006 15:39:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wie erstell ich einen Thread? on Sun, 24 Dec 2006 06:28:04 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>Am besten Du erstellst den Timer mit SetTimer. Unter dem Message-Handler für WM_TIMER startest Du dann den Thread mit:</p>
<pre><code class="language-cpp">// Hinweis: Du musst in Deinen Compiler-Settings noch Multithreading aktivieren!
#include &lt;Process&gt;

typedef struct
{
  // Hier die Variablen die Du Deinem Thread übergeben willst...
  // Beispiel:
  int iValue;

} SThreadData;

// Die Strukturvariable muss im Thread noch existieren:
static SThreadData ThreadData;
unsigned int uiThreadID; // Die ID wird manchmal für best. Funktionen benötigt
// Initialisieren:
ThreadData.iValue = 20; // (Beispielwert)
HANDLE hThread = reinterpret_cast&lt;HANDLE&gt;(_beginthreadex(NULL, 0, ThreadProc, &amp;ThreadData, NULL, &amp;uiThreadID));

// ThreadProc ist eine von Dir definierte Funktion, die z.B.: so aussehen könnte:
unsigned __stdcall ThreadProc(void* pvThreadData)
{
   // Hier irgendwas machen ;-) ...
   // ...

   // Und Verlassen:
   _endthreadex(0); // Exit-Code: 0
   return (0);
}
</code></pre>
</blockquote>
<p>Wieso machst du ThreadData static? Ist doch schlecht, wenn der Thread mehrmals gestartet wird, dann haben alle die gleiche ThreadData. Mach doch lieber new und der Thread macht delete, wenn er fertig ist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1197265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197265</guid><dc:creator><![CDATA[Alle Jahre wieder!  Rud]]></dc:creator><pubDate>Sun, 24 Dec 2006 06:28:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wie erstell ich einen Thread? on Sun, 24 Dec 2006 11:23:04 GMT]]></title><description><![CDATA[<p>ich frage mich nur wieso man eine struct erstellen soll und des ganze per reinterprer_cast in ein handel stopfen muss -.- wieso den net einfach<br />
HANDEL hThread = CreateThread( ... )<br />
hat nicht wer nen schoenes gutes verstaendliches am besten auch gleich noch zu kompilierendes tut?</p>
<p>Gruß Tobi, frohes Fest :xmas1: :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1197322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197322</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Sun, 24 Dec 2006 11:23:04 GMT</pubDate></item><item><title><![CDATA[Reply to Wie erstell ich einen Thread? on Sun, 24 Dec 2006 12:21:34 GMT]]></title><description><![CDATA[<p>@(D)Evil<br />
<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createthread.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/createthread.asp</a></p>
<blockquote>
<p>A thread in an executable that calls the C run-time library (CRT) should use the _beginthreadex and _endthreadex functions for thread management rather than CreateThread and ExitThread; this requires the use of the multi-threaded version of the CRT. If a thread created using CreateThread calls the CRT, the CRT may terminate the process in low-memory conditions.</p>
</blockquote>
<p>Und wer weiß ob er nicht irgendwo die CRT benutzt? <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/1197347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197347</guid><dc:creator><![CDATA[yogle]]></dc:creator><pubDate>Sun, 24 Dec 2006 12:21:34 GMT</pubDate></item><item><title><![CDATA[Reply to Wie erstell ich einen Thread? on Sun, 24 Dec 2006 15:38:06 GMT]]></title><description><![CDATA[<p>@Alle Jahre wieder! Rud:<br />
Das häntg wie ich schon sagt vom Kontext ab, wenn er nur einen Thread erstellt (und genau das hatte er doch vor), kannst Du Dir die dynamische Allokation sparen und vor der WndProc die Thread-Variable als statich definieren. Da spart man ne Menge Arbeit. Klar, wenn Du mehrere Threads starten willst, kannst natürlich auch new/delete 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>
<p>EDIT <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9381">@yogle</a>: Genau so ist es <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/1197426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1197426</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Sun, 24 Dec 2006 15:38:06 GMT</pubDate></item></channel></rss>