Timer event
-
Toa schrieb:
void foo() { int var; var + 5 ; sleep (10 min); var - 5 ; }wuerde das so klappen ?
Wenn ich mir das so ansehe, solltest du dir vielleicht eher noch mal die Grundlagen anschauen...?
-
Ja lol , das is "Pseudo COde" Also nur Programm Logik kein ausführbarer COde xD
-
Aso, ok

-
timeSetEvent() sag ich mal
-
Bringt nichts wenn man keine Event-Queue hat.
Sonst ist was in die Richtung natürlich geeignet.
-
Also ich mach das ganze nun so und das klappt auch :
//main DWORD threadId; HANDLE threadHandle; threadHandle =CreateThread(NULL, 0, ThreadProc, NULL, 0, &threadId);und hier der thread
DWORD WINAPI ThreadProc(LPVOID lpParam) { //Sleep(60000); Sleep(40000); }jetzt noch eine kleine Frage wie kann ich dem Thread diesen Zeiger Übergeben sPlayer *wPlayer ?
Also eigentlich müsste man den Thread doch dann so aufrufen :
threadHandle =CreateThread(NULL, 0, ThreadProc, wPlayer, 0, &threadId);aber was muss in die signatur von DWORD WINAPI ThreadProc(LPVOID lpParam) )
weil DWORD WINAPI kann man ja nur einen Void Pointer übergeben Sad
wie mach ich das denn nun ??
-
Du castest den Player-Zeiger einfach auf einen void-Zeiger. In der Thread-Funktion castest du wieder zurück... Der void-Zeiger ist ja quasi nur ein Platzhalter, "void" ist schließlich kein Typ.
-
Okay wie war das noch mal
wenn ich einen sPlayer *wPlayer Zeiger umcasten will dann
void *voidPtr; voidPtr = wPlayer; wPlayer = (int *)voidPtr; threadHandle =CreateThread(NULL, 0, ThreadProc, voidPtr, 0, &threadId);und der thread :
DWORD WINAPI ThreadProc(LPVOID voidPtr)aber bei mir kommt der fehler cannot convert int* to sPlayer* in assigment
-
Da mußt du auch den richtigen Cast verwenden - und die Umwandlung deines sPlayer in einen int nützt dir gar nichts:
void *voidPtr; voidPtr = wPlayer; wPlayer = (sPlayer *)voidPtr;btw solltest du die Rück-Umwandlung IN der Thread-Funktion durchführen:
DWORD WINAPI ThreadProc(LPVOID voidPtr) { sPlayer* object = (sPlayer*) voidPtr; ...//arbeite mit *object }
-
Du machst es dir etwas zu kompliziert
(edit: damit meine ich natürlich nicht CStoll))threadHandle =CreateThread(NULL, 0, ThreadProc, (void*)wPlayer, 0, &threadId); DWORD WINAPI ThreadProc(LPVOID voidPtr) { sPlayer* wPlayer = (sPlayer*) voidPtr; }oder aber, weil der Code oben teuflisch böse und fehleranfällig ist, nutze reinterpret_cast<void>(wPlayer)* bzw reinterpret_cast<sPlayer>(voidPtr)*

edit2: Wow, da war ich 1 (in Worten: eine) Sekunde zu langsam

-
Thx habs
.. Klappt alles wunderbar ..