Beliebig viele Threads
-
Also auf die globalen Variablen kann afaik jeder Thread zugreifen. Damit es dabei zu keinen unerwarteten Problemen kommt sollte man aber soviel ich wieß den Zugriff gezielt regulieren (Critical Section)
Lokale Variablen hat (nehme ich mal an) jeder Thread seine eigenen.
Und dann solltest du noch darauf achten, dass du nicht die SingleThread sondern die MultiThread-Versionen der Laufzeitbibliothek linkst
-
Also ich will dir wirklich gerne helfen.
Aber verrate mir doch dazu mal bitte etwas genauer was deine Anwendung denn am Ende werden soll?
Chatserver? Webserver? Oder was?
-
flenders schrieb:
Lokale Variablen hat (nehme ich mal an) jeder Thread seine eigenen.
Exakt!
Jeder Thread hat seine eigenen lokalen Variablen!
Aber vorsicht bei "static" Variablen, auf die hat dann wiederum jeder Thread Zugriff und kann sie verändern!Zugriffe auf globale Variablen sollte man mit Synchronisations-Funktionen tätigen.
Die MSDN bietet sehr schöne Infos über MSDN: Synchronization Functions.Ebenso wäre die Lektüre des Buches:
Microsoft Windows Programmierung für Experten | ISBN: 3860636154
anzuraten. Da steht sowas nämlich genauestens beschrieben drin...
-
Tag,
ich habe vor so eine art Upload / Download Server zu bauen -> Dateien von überall rauftun und von überall runterladen. Soweit ging alles (Verbindung, Datenübertragung, etc.) nur halt alles nur mit einem User gleichzeitig, desweiteren hatte ich vor das man auch mehrere Dateien Gleichzeitig saugen / uppen kann.und all dies geht mit Threads...nur hab ich bis jetzt noch nicht so wirklich viel Ahnung von Threads

Neben Frage: (ja ich hab wirklich keine ahnung von dem was ich tue *seufz*)
Gibt es eigentlich eine maximal Anzahl von Threads die eine Anwendung haben darf? (Win9X / ME)MfG ToBias
-
Add:
Danke euch!PS:
flenders schrieb:
Und dann solltest du noch darauf achten, dass du nicht die SingleThread sondern die MultiThread-Versionen der Laufzeitbibliothek linkst

[Bitten nicht falsch verstehen]
Ach ne, echt? :p
-
Bezüglich der Anzahl von Threads.
Wenn man mal davon ausgeht das die LDT genutzt wird um da TSS-Segmente für die einzelnen Threads zu speichern, dürfte man theoretisch etwas um die 8000 Threads möglich machen können.
Realistisch ist das aber nicht, da jeder Thread auch seinen eigenen Stack braucht und ja auch Prozessorzeit benötigt.
Ein Apache-Webserver hat einige Hundert threads, je noch Auslastung soweit ich das beurteilen kann. Aber ob es sogar in die tausender geht mag ich zu bezweifeln. Aber das sind nur Spekulationen.
Ich denke mal du solltest auf jeden Fall ein Maximum an Threads festlegen, da deine Bandbreite mit sicherheit wohl zu allererst in die Knie gehen wird

-
Ich hab mir mal (ohne die Foren Suche
) nen Code gebastelt und möchte mal wissen ob das prinzipiell ok / richtig ist:#include <windows.h> #include <process.h> #include <vector> using namespace std; unsigned __stdcall FooThread(void* Parameter); static unsigned ThreadID; LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); //[...] WIN MAIN [...] // ist natürlich da aber ist hier unwichtig also lass ich's weg... struct ParamStruct { char* Param1; char* Param2; }; HANDLE hThread1, hThread2; LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { static vector<ParamStruct> Input(2); switch (iMsg) { case WM_CREATE: Input.at(0).Param1 = "FOOOOO"; Input.at(0).Param2 = "erster thread!"; Input.at(1).Param1 = "FOOOOO"; Input.at(1).Param2 = "zweiter thread!"; hThread1 = (HANDLE) _beginthreadex(NULL, 0, &FooThread, &Input.at(0), 0, &ThreadID); hThread2 = (HANDLE) _beginthreadex(NULL, 0, &FooThread, &Input.at(1), 0, &ThreadID); break; case WM_DESTROY: PostQuitMessage(0); break; } return DefWindowProc (hwnd, iMsg, wParam, lParam) ; } unsigned __stdcall FooThread(void* Parameter) { struct ParamStruct* Inp; Inp = (struct ParamStruct*) Parameter; // nur nen Beispiel... MessageBox(NULL, Inp -> Param1, Inp -> Param2, 0); return 0; }MfG Tobias
ThX!
-
Push --- up
Huhu?
-
Hm.. Mag wohl keiner sagen ob der (2 Posts drüber) gepostete code ok ist oder ob was zu verbessern ist...

-
Hallo !
Bin da totaler Anfänger auf diesem Gebiet, aber sieht doch ganz gut aus, finde
ich !
Was mir noch nicht soch ganz klar ist, wozu sind die beiden Variablen ThreadID, wenn man doch eh für jeden neuen Thread ein Handle bekommt ??Muss man dann nicht auch noch ExitThread oder sowas aufrufen ??
Denke mal, ich werde morgen abend mal dein Proggie testen, jetzt ertmal bubu !Bye, J.
-
Joe schrieb:
Was mir noch nicht soch ganz klar ist, wozu sind die beiden Variablen ThreadID, wenn man doch eh für jeden neuen Thread ein Handle bekommt ??
Man bekommt ja nur bei _beginthreadex nen _gültiges_ Handle steht hier auch in nem Thread weiter unten. (oder Seite 2-3...)
Joe schrieb:
Muss man dann nicht auch noch ExitThread oder sowas aufrufen ??
Ich hab überall gehört: man solle doch den Thread von alleine auslaufen lassen...
Das heißt für mich eben kein ExitThread() sondern ihn bis ganz durch die Funktion durchlaufen zu lassen und fertig...
Oder sehe ich das falsch?
-
So sehe ich das auch
