Argumente an _beginthread übergeben?
-
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.
-
warum funktioniert es dann mit int werten die ich dem Thread übergebe? Und kann ich die struct instanze nicht static machen? Dann wird sie auch nicht zerstört
-
Guest998 schrieb:
warum funktioniert es dann mit int werten die ich dem Thread übergebe?
Weil int und void* zufällig dieselbe Grösse haben.
Guest998 schrieb:
Und kann ich die struct instanze nicht static machen? Dann wird sie auch nicht zerstört
Weils nicht dem Sinn entspricht. Ausserdem, was wenn Du ein zweiter Thread machst?
Oft muss static als Lösung herhalten, weil die Leute nicht verstehen, was Klassen / Strukturen und Objekte (und ihre Lebensdauer) sind.
Simon