thread
-
ich will einen thread erstellen - das klappt auch schon ganz gut:
_beginthread (dosock, 4096, NULL);allerdings soll der auch events auslösen können, auf die andere threads reagieren können:
HANDLE **asd = new HANDLE*[10]; asd[0] = new HANDLE[5]; asd[0][0] = CreateEvent (NULL, false, false, NULL); _beginthread (dosock, 4096, (void *) asd);wenn ich ihm aber nun seine Zeile zuweisen soll, wie lös ich das am elegantesten?
mit pair <handles, zeilennr.>?
macht man das überhaupt so oder is das scho ma komplett falsch?außerdem bin ich mir auch unsicher, was die 4KB betrifft - kann ich das den Thread irgendwie dynamisch regeln lassen? und was zählt in die 4KB alles mit rein? würde das array mitzählen, obwohl ich nur nen pointer darauf übergebe?
bevor jmd was sagt: ja, ich weiß, dass das handle threadsicher sein muss - hab ich mit events gelöst - criticalsession ging iwie nicht - hab ich mich zu doof angestellt ^^
die letzte frage:
nimmt man in C++ überhuapt noch _beginthread oder ist das C und gibts ne bessere Funktion?Danke : >
-
unskilled schrieb:
nimmt man in C++ überhuapt noch _beginthread oder ist das C und gibts ne bessere Funktion?
Weder der C noch der C++ Standard kennt überhaupt Threads. Alle Threadtechniken sind mehr oder weniger Plattformabhängig, wenn gleich es Bibliotheken gibt die es für den Anwender verbergen. Erst der kommende C++ Standard wird voraussichtlich Threads in den Standard übernehmen.
cu André
P.S: Das sieht für mich wie Win32 API aus. Wenn ja, es gibt ein entsprechendes Unterforum.
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Gib als Stack-Grösse einfach 0 an, dann regelt Windows das dynamisch bis max. 1MB (und 1MB reicht normalerweise locker).
Weniger kannst du mit _beginthreadex AFAIK sowieso nicht erzwingen.Zur Übergabe von Daten an den Thread solltest du die in eine Struktur packen, z.B. so:
struct MyThreadParams { HANDLE events[5]; int blablubb; // ... }; // thread funktion: unsigned __stdcall MyThreadFunction(void * p) { std::auto_ptr<MyThreadParams> params(static_cast<MyThreadParams*>(p)); // ... } // thread erstellen: MyThreadParams* params = new MyThreadParams; // *params ausfüllen HANDLE threadHandle = reinterpret_cast<HANDLE>(_beginthreadex(0, 0, MyThreadFunction, params, 0, 0)); if (!threadHandle) { // thread konnte nicht erstellt werden delete params; // ... }Du *musst* die "Parameter" für den Thread natürlich nicht dynamisch anfordern/freigeben, aber du kannst nur einen einzigen Zeiger übergeben, und die oben gezeigte Variante eignet sich für die meisten Fälle recht gut.
-
gut - danke...
dachte nur, dasses evtl au einfacher geht : <Tom
-
wieso, das ist doch einfach???