Argumente an _beginthread übergeben?
-
gretting
wie kann ich eine structur an beginthread übergeben? Weil der Parameter ist ja void* und dann hab ich in der Structur einen void* parameter. Wie soll ich durch diesen die struct Variablen bekommen? Structname s1 = void*param? Das geht wohl kaum. Ein Beispiel wäre auch super
-
-
toll, natürlich habe ich schon gegoogelt aber nirgends wird eine struct an beginthread übergeben. Was soll das, wenn man in einem WinAPi Forum auf google verwießen wird?
-
Einfach nach void*/zurück nach StructType* casten.
-
dann kommt kann nicht convertiert werden...
-
Guest998 schrieb:
toll, natürlich habe ich schon gegoogelt aber nirgends wird eine struct an beginthread übergeben. Was soll das, wenn man in einem WinAPi Forum auf google verwießen wird?
wenn du echt nicht dazu fähig warst über google die lösung zu finden solltest du besser das programmieren aufgeben.
-
Zeig doch mal den relevanten Code. Da kann Dir besser geholfen werden.
Simon
-
konvertiert mit k
und es kann sehr wohl konvertiert werden. mit static_cast oder reinterpret_cast.
-
oder mit klammer cast
-
_S schrieb:
oder mit klammer cast
"klammer cast"?
int(5) und (int)5 wäre beides klammercasts. daher halte ich klammercast für eine ungeschickte wortwahl, zumal die anderen casts alle auch nicht mit ohne klammern gehen.
-
sorry ich meinte den typ umklammer cast
-
hab immernoch Probleme:
Params a1; _tcscpy_s(a1.HP, TEXT("HP1")); _beginthread(paramtest, 0, &a1); ... void AutoHealer(void* params) { Params *a1 = (Params *)params; if(!_tcscmp(a1->HP, TEXT("HP1"))) // wird nicht ausgelöstwenn ich den vergleich im Debugger verfolge, ist in a1->HP irgendwas mit \x01 oder so? wo ist der Fehler?
-
instanziere das Params object auf dem heap damit es nicht ungültig wird
-
wie jetzt
-
-
ich kopiere es doch mit strcpy in den Buffer der Struct und übergebe in dem Thread warum soll ich dann noch new aufrufen und vor allem wo? Und warum geht das nur dynamisch?
-
Du musst dafür sorgen dass die Instanz von "Params" (a1) nicht ungültig wird.
Das geht entweder indem du aus a1 einen Zeiger machst, und die Instanz dann mit "a1 = new Params;" anlegst, oder indem du nach _beginthread(ex), und VOR Verlassen der Funktion, darauf wartest, dass der Thread gestartet wurde, und die übergebenen Parameter ausgewertet hat.Die "Warten" Variante ist allerdings komplizierter und auch IMO weniger "schön" bzw. "sauber".
Natürlich musst du die "Params" Instanz dann auch wieder freigeben. Das machst du dann einfach im Thread, mittels delete, nachdem du alle Parameter ausgewertet oder kopiert hast.
-
könntest du bitte ein Beispiel zeigen, wie ich dass übergeben muss, bin noch nicht so lang im Boot

-
bitte helft ihm nicht, er ist noch nicht reif für threads
-
@Guest998:
Lern lieber die nötigen Grundlagen. Wenn du die kannst, sollte meine Beschreibung vollkommen ausreichend sein.
Wenn du die nicht kannst, wirst du mit einem Code-Schnipsel wenig anfangen können, ausser ihn 1:1 zu kopieren.