Mehrere Werte der Funktiuon _beginthreadex mit auf dem Weg geben
-
Guten Abend,
ich möchte einen Thread starten dessen aufzurufende Funktion zwei Integerwerte bei der Übergabe erwartet in etwa so:
void funktion_1(int zahl1, int zahl2){ : _endthreadex(1); } void funktion2(void){ _beginthreadex(NULL, 0, (void *)funktion_1, (void *)(zahl1, zahl2), 0, &thread_id); }jedoch scheine ich das falsch zu machen, zahl2 ist in der Funktion immer 0. Wie muss ich das korrekt aufrufen? Danke.
Manni
-
Erstell eine Struktur und allokiere diese via new. Gebe die Daten dann im Thread beim ende mit delete wieder frei.
-
Also wie ich eine Struktur in einer Headerdatei erstelle weiss ich, jedoch nicht so wie du er mir rätst. Kannst du mir vieleicht einen Bsp Code posten, danke.
-
Du brauchst Dafür keinen Header!
Auf korrekten Syntax habe ich nicht geprüft...
struct SMYData { itn val1, val2; }; ... unsigned funktion1(void *p) { SMYData *pData = static_cast<SMYData *>(p); ... } void funktion2(void) { SMYData data; data.val1 = 1; data.val2 = 2; _beginthreadex(NULL, 0, funktion1, &data, 0, &thread_id); }
-
Ehm, wärs nicht besser die SMYData variable so anzulegen, dass sie den Aufruf von funktion2 überlebt?
z.B. mit new od. als Member der umschliessenden Klasse...
-
simon.gysi schrieb:
Ehm, wärs nicht besser die SMYData variable so anzulegen, dass sie den Aufruf von funktion2 überlebt?
z.B. mit new od. als Member der umschliessenden Klasse...Extrem guter Hinweis!

Sorry für meinen etwas hirnlosen Tipp...
Korrktur:
struct SMYData { SMYData(int i1, i2) : val1(i1), val2(i2) {} int val1, val2; }; ... unsigned funktion1(void *p) { SMYData *pData = static_cast<SMYData *>(p); ... delete pData; ... } void funktion2(void) { _beginthreadex(NULL, 0, funktion1, new SMYData(1,2), 0, &thread_id); }