Timer event



  • 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 ..


Anmelden zum Antworten