<?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[Threading]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich befasse mich erst seit kurzem mit Winsock-Funktionen (und C/C++ allgemein) und habe glücklicherweise auch schon viel Erfolg gehabt!<br />
Da gewisse Funktionen &quot;blockling calls&quot; sind möchte ich das mit einem Thread lösen.<br />
Im Detail schreibe ich ein Sampel, welches Daten senden und empfangen können soll.<br />
Nun möchte ich einen Thread erzeugen damit ich paralell zum senden auch Daten empfangen kann, d.h. das Empfangen der Daten soll in einem Thread durchgeführt werden.<br />
Mir sind bereits auch Funktionen wie CreateThread(....) bekannt, allerdings habe ich beim implementieren Probleme bzw. bekomme gar nichts auf die Reihe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Ich wäre dankbar für ein paar Zeilen Code, die einen Thread erzeugen, sodass ich dies an einem lauffähigen Programm nachollziehen kann.</p>
<p><strong>Mir ist bekannt das es auch andere Lösungsalternativen gibt, aber ich möchte das unbedingt so realisieren.</strong></p>
<p>P.S.: Habe auch schon das Forum durchstöbert, allerdings hat mir das nicht geholfen, bitte auch keine MSDN Links, danke.</p>
<p>Vielmals danke für die Hilfe!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/118382/threading</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Jul 2026 11:18:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118382.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 17 Aug 2005 20:36:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Threading on Wed, 17 Aug 2005 20:36:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich befasse mich erst seit kurzem mit Winsock-Funktionen (und C/C++ allgemein) und habe glücklicherweise auch schon viel Erfolg gehabt!<br />
Da gewisse Funktionen &quot;blockling calls&quot; sind möchte ich das mit einem Thread lösen.<br />
Im Detail schreibe ich ein Sampel, welches Daten senden und empfangen können soll.<br />
Nun möchte ich einen Thread erzeugen damit ich paralell zum senden auch Daten empfangen kann, d.h. das Empfangen der Daten soll in einem Thread durchgeführt werden.<br />
Mir sind bereits auch Funktionen wie CreateThread(....) bekannt, allerdings habe ich beim implementieren Probleme bzw. bekomme gar nichts auf die Reihe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Ich wäre dankbar für ein paar Zeilen Code, die einen Thread erzeugen, sodass ich dies an einem lauffähigen Programm nachollziehen kann.</p>
<p><strong>Mir ist bekannt das es auch andere Lösungsalternativen gibt, aber ich möchte das unbedingt so realisieren.</strong></p>
<p>P.S.: Habe auch schon das Forum durchstöbert, allerdings hat mir das nicht geholfen, bitte auch keine MSDN Links, danke.</p>
<p>Vielmals danke für die Hilfe!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854463</guid><dc:creator><![CDATA[anfänger :&#x2F;]]></dc:creator><pubDate>Wed, 17 Aug 2005 20:36:38 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Wed, 17 Aug 2005 21:00:55 GMT]]></title><description><![CDATA[<p><a href="http://www.c-worker.ch/" rel="nofollow">http://www.c-worker.ch/</a>, ich glaub dort wirst du fündig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854479</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Wed, 17 Aug 2005 21:00:55 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Wed, 17 Aug 2005 21:18:03 GMT]]></title><description><![CDATA[<p>bau ein kleines programm wo du versuchst threads zu verwenden, dann poste es hier und wir können mal drüberschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854485</guid><dc:creator><![CDATA[eventuell]]></dc:creator><pubDate>Wed, 17 Aug 2005 21:18:03 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 11:49:14 GMT]]></title><description><![CDATA[<p>Hi, hier ist ein Ausschnitt aus meinem Code, in welchem ich versuche einen Thread zu verwenden.<br />
Nach 'accept' soll ein weiterer Thread geöffnet werden, der für den Empfang der Daten zuständig ist.</p>
<pre><code class="language-cpp">....

acceptSocket = accept(mysocket, NULL,NULL);
// sobald eine Verbindung über angenommen wurde soll nun der Thread gestartet 
// werden.
HANDLE hNewRecvThread;

hNewRecvThread = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)RecvThread, NULL, NULL, NULL);
</code></pre>
<p>Der Thread sollte nun erstellt sein und im Hintergrund laufen <strong>oder</strong>?</p>
<p>Die Funktion RecvThread beinhaltet folgenden Code:</p>
<pre><code class="language-cpp">void RecvThread()
{
int rc; /* Variable fuer Rueckgabewerte */
char incoming[256];
int rc;
rc = recv(mysocket, incoming, strlen(incoming),0);
//cout &lt;&lt; incoming &lt;&lt; endl;
</code></pre>
<p>Nun aber: Wie übergebe ich den Socket <strong>mysocket</strong> der Funktion Recvthread() so das dieser ihr bekannt ist?<br />
Geht das überhaupt so wie ich das mache?</p>
<p>Bitte um Hilfe und bedanke mich gleich mal dafür <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="🙂"
    /><br />
Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854867</guid><dc:creator><![CDATA[anfänger :&#x2F;]]></dc:creator><pubDate>Sat, 20 Aug 2005 11:49:14 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 11:55:43 GMT]]></title><description><![CDATA[<p>CreateThread - 4. Parameter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854872</guid><dc:creator><![CDATA[....]]></dc:creator><pubDate>Sat, 20 Aug 2005 11:55:43 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 11:56:49 GMT]]></title><description><![CDATA[<p>Und die Threadproc muss die folgende Signatur haben:</p>
<pre><code class="language-cpp">DWORD WINAPI ThreadProc(LPVOID lpParameter);
</code></pre>
<p>Dann brauchst du den Cast auch nicht mehr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854873</guid><dc:creator><![CDATA[.......]]></dc:creator><pubDate>Sat, 20 Aug 2005 11:56:49 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 13:23:30 GMT]]></title><description><![CDATA[<p>Ok du meinst also der 4te Parameter der CreateThread()-Funktion soll den Namen ThreadProc() haben.</p>
<p>Das sieht dann so aus:</p>
<pre><code class="language-cpp">hNewRecvThread = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, NULL, NULL);
</code></pre>
<p>ThreadProc() sieht nun so aus:</p>
<pre><code class="language-cpp">DWORD WINAPI ThreadProc( LPVOID lpParam ) 
{ 

char recBuf[256];

recv(mysocket, recBuf, sizeof(recBuf), NULL);
cout &lt;&lt; recBuf &lt;&lt; endl;
return 0;

}
</code></pre>
<p>Da die Funktion außerhalb von main()<br />
deklariert wurde ist ihr natürlich der Parameter &quot;mysocket&quot; nicht bekannt.<br />
Dieser wird aber unbedingt benötigt, um die Daten zu senden.(???)<br />
Mache ich hier einen Denkfehler und kann mir jemand sagen, was ich falsch mache?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854935</guid><dc:creator><![CDATA[anfänger :&#x2F;]]></dc:creator><pubDate>Sat, 20 Aug 2005 13:23:30 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 13:26:53 GMT]]></title><description><![CDATA[<p>Für WinAPI bist du noch nicht reif genug wenn man deinen Beitrag so liest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854936</guid><dc:creator><![CDATA[the truth]]></dc:creator><pubDate>Sat, 20 Aug 2005 13:26:53 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 13:51:53 GMT]]></title><description><![CDATA[<p>Das kann schon gut sein, das er dafür nicht &quot;reif&quot; genug ist, aber wie soll den etwas wachsen wenn du ihm so eine schlechte antwort gibst? wahrscheinlich hast du keine ahnung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854952</guid><dc:creator><![CDATA[meinung]]></dc:creator><pubDate>Sat, 20 Aug 2005 13:51:53 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 14:20:16 GMT]]></title><description><![CDATA[<p>Hallo man sollte _beginthreadex benutzen und nicht CreateThread.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854967</guid><dc:creator><![CDATA[......]]></dc:creator><pubDate>Sat, 20 Aug 2005 14:20:16 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 14:27:35 GMT]]></title><description><![CDATA[<p>du hast zwei moeglichkeiten:<br />
A: mysocket machst du zu einer globalen variable</p>
<p>B: Die Funktion die parallel ausgefuehrt werden soll ( in deinem Fall: ThreadProc ) kann genau einen parameter haben und dieser ist ein int oder ein pointer also 4 byte lang. SOCKET ist auch 4 byte lang also kannst du direkt deinen mysocket uebergeben oder aber du nutzt diese 4 byte als pointer und laesst ihn auf deinen mysock zeigen. Musst halt dann dafuer sorgen das mysocket gueltig ist wenn recv() drauf zu greifen will</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854969</guid><dc:creator><![CDATA[windowsxp]]></dc:creator><pubDate>Sat, 20 Aug 2005 14:27:35 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 15:05:05 GMT]]></title><description><![CDATA[<p>Vielen Dank!<br />
Deine Hilfe hat mir sehr geholfen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/854992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/854992</guid><dc:creator><![CDATA[anfänger :&#x2F;]]></dc:creator><pubDate>Sat, 20 Aug 2005 15:05:05 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 15:41:14 GMT]]></title><description><![CDATA[<p>Ich habe ein ähnliches Problem.</p>
<p>Ich starte den Thread ebenso wie anfänger <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="😕"
    /> mit CreateThread und rufe eine Funktion, welche für den Empfang der Daten zuständig ist.</p>
<p>Hat sich mein Client mit dem Server verbunden was auch geht, haben beide die Möglichkeit Daten zu senden bzw. Text.<br />
Der Thread müsste doch immer die Daten ausgeben die empfangen wurden oder? So habe ich das implementiert. Ich meine er läuft doch im Hintergrund?<br />
Ich hoffe das ist nicht allzu ungenau. Gebe euch natürlich gerne alle Infos die ihr benötigt.</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855011</guid><dc:creator><![CDATA[meinung]]></dc:creator><pubDate>Sat, 20 Aug 2005 15:41:14 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 17:37:32 GMT]]></title><description><![CDATA[<p>Hier ist der Server:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;winsock2.h&gt;
#include &lt;iostream&gt;
using namespace std;
#pragma comment( lib, &quot;ws2_32.lib&quot; )
using namespace std;
//#include &lt;process.h&gt; nur für benginthread(ex) benötigt
SOCKET acceptSocket;

DWORD WINAPI ThreadProc() 
{ 
for(;;)
{
char recBuf[256];
int receive;

receive = recv(acceptSocket, recBuf, sizeof(recBuf), NULL);
cout &lt;&lt; &quot;&quot; &lt;&lt; endl;

return 0;
} //for
}

int StartWinsock()
{
	;
	WSAData wsaData;
	WORD wVersion = MAKEWORD(2,0);
	return WSAStartup(wVersion, &amp;wsaData);
}

int main()

{
int retStartup;
retStartup = StartWinsock();
if(retStartup!=0)
{
	cout &lt;&lt; &quot;Error WSAStartup: &quot; &lt;&lt; WSAGetLastError() &lt;&lt; endl;
}

SOCKET mysocket; //Basic
 //Verbindungsannahme, wartet nur auf Verbindungen mehr nicht

mysocket = socket(AF_INET,SOCK_STREAM,0);

SOCKADDR_IN addr;

char ServerAdress[] = &quot;127.0.0.1&quot;;
memset(&amp;addr,0,sizeof(SOCKADDR_IN));
addr.sin_family = AF_INET; // Adress Familie
addr.sin_port = htons(12345); // Socket an Port 12345 binden
addr.sin_addr.s_addr = inet_addr(ServerAdress); 

bind(mysocket, (SOCKADDR*)&amp;addr, sizeof(addr));

listen(mysocket, SOMAXCONN);

int addrlen = sizeof addr;

cout &lt;&lt; &quot;Mein simpler Chat, Version 1.0&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;***   Matthias Heil 2005   ***&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Waitung for incoming connection... &quot; &lt;&lt; endl;

acceptSocket = accept(mysocket, NULL,NULL);

if(acceptSocket != SOCKET_ERROR)
{
	cout &lt;&lt; &quot;Client connected&quot; &lt;&lt; endl;
}

CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, 0, NULL);

for(;;)
{
char message[256];
cout &lt;&lt; &quot;Enter Message to send:&quot;;
cin.getline(message, 256);
sendto( acceptSocket, message, sizeof(message)+1, 0, NULL, NULL);

} //for

return(0);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/855064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855064</guid><dc:creator><![CDATA[meinung]]></dc:creator><pubDate>Sat, 20 Aug 2005 17:37:32 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 18:18:23 GMT]]></title><description><![CDATA[<p>Hier ist der Client:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;stdio.h&gt;
#include &lt;winsock2.h&gt;
using namespace std;

#define SERVER_PORT 12345

SOCKET sock; //Global!!!

DWORD WINAPI ThreadProc() 
{ 
for(;;)
{

char incoming[256];

recv(sock, incoming, sizeof(incoming),NULL);
cout &lt;&lt; &quot;&quot; &lt;&lt; endl;
cout &lt;&lt; &quot;Incoming: &quot; &lt;&lt; incoming &lt;&lt; endl;
return 0;
} //for
}

long go() // Socket-Service starten (unter Windows erforderlich).
{
long rc;
WSADATA wsaData; // WSADATA-Objekt erstellen.
WORD wVersionRequested;
wVersionRequested = MAKEWORD(2,1); // zu Verwendene Version: 2.1.
								   // mit MAKEWORD-Makro WORD-Wert erstellen
rc = WSAStartup(wVersionRequested, &amp;wsaData); // WSAStartup aufrufen
return rc;
/*
siehe:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsastartup_2.asp
*/
} 

void main()
{

SOCKADDR_IN addr;
//long rc;
char hostAdress[] = &quot;127.0.0.1&quot;;

//WSAStartup aufrufen
go();

//Socket anlegen

sock=socket(AF_INET,SOCK_STREAM,NULL);

// Informationen fuer Verbindung
addr.sin_family = AF_INET;
addr.sin_port = htons(SERVER_PORT);
addr.sin_addr.s_addr = inet_addr(hostAdress);

//Socket mit Server verbinden, endlos immer wieder probieren
while(connect(sock, (SOCKADDR*)&amp;addr, sizeof(SOCKADDR)) == SOCKET_ERROR)
{
printf(&quot;.&quot;); // Lebenszeichen ausgeben
Sleep( 500 ); // 500ms warten
}

// Wenn Server gefunden...
printf(&quot;Verbunden&quot;);
cout &lt;&lt; &quot;&quot; &lt;&lt; endl;

CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)ThreadProc, NULL, NULL, NULL);

for(;;)
{
char message[256];
cout &lt;&lt; &quot;Enter Text to send: &quot;;
cin.getline(message, 255);
//sprintf(message, &quot;Hi I am the client!!!&quot;);

sendto( sock, message, sizeof(message)+1, 0, NULL, NULL);

}
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/855092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855092</guid><dc:creator><![CDATA[meinung]]></dc:creator><pubDate>Sat, 20 Aug 2005 18:18:23 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 18:24:47 GMT]]></title><description><![CDATA[<p>Wenn dein Programm die C-Runtime verwendet solltest du CreateThread() durch _beginthreadex() ersetzen sonst könnte es zu Problemen kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855094</guid><dc:creator><![CDATA[Chew-Z]]></dc:creator><pubDate>Sat, 20 Aug 2005 18:24:47 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 18:31:54 GMT]]></title><description><![CDATA[<p>Mach erstmal den (LPTHREAD_START_ROUTINE)-Cast weg. Ist unnötig wenn die Threadfunktion die richtige Signatur hat. <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>
<p>Ok, hilft aber alles nix beim deinem Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855095</guid><dc:creator><![CDATA[*zzz*]]></dc:creator><pubDate>Sat, 20 Aug 2005 18:31:54 GMT</pubDate></item><item><title><![CDATA[Reply to Threading on Sat, 20 Aug 2005 19:01:08 GMT]]></title><description><![CDATA[<p>Chew-Z schrieb:</p>
<blockquote>
<p>Wenn dein Programm die C-Runtime verwendet solltest du CreateThread() durch _beginthreadex() ersetzen sonst könnte es zu Problemen kommen.</p>
</blockquote>
<p>Ja dazu is dann &lt;process.h&gt; erforderlich. Denkst du echt das es daran liegt?<br />
Ist die sonst nichts aufegefallen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/855099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/855099</guid><dc:creator><![CDATA[meinung]]></dc:creator><pubDate>Sat, 20 Aug 2005 19:01:08 GMT</pubDate></item></channel></rss>