Timer event



  • Woher bekomm ich das hab ma gegoogelt und da bekomm ich ein mega pack an files und wenn ich die Thread linke muss die wiederrum mit einer Config gelinkt sein etc



  • Toa schrieb:

    Woher bekomm ich das hab ma gegoogelt und da bekomm ich ein mega pack an files und wenn ich die Thread linke muss die wiederrum mit einer Config gelinkt sein etc

    Es gibt eine config.hpp, aber an der musste ich bisher weder was verändern, noch die explizit dazulinken.

    Am besten liest du dir mal die Anleitung durch wie man boost unter windows kompiliert und benutzt: http://boost.org/more/getting_started/windows.html



  • Das klappt bei mir alles nicht schon recht nicht mit #include < > ich muss " nehmen damit er überhaupt die thread file findet und dann hat er Probleme die config und anderen files zu finden



  • Du musst den Ordner mit den boost:: Headerns schon zum Include-Path hinzufügen.



  • Reicht es denn nicht wenn die die thread.hpp include die anderen files sind doch in der thread.hpp includet ...

    ..Edit : kannst du vielleicht ein leeres Projekt machen die boost files adden und hochladen ? das wäre super weil bei mir will und will es nicht klappen



  • http://www.savefile.com/files/935472

    Funktioniert bei mir

    EDIT://

    #include <iostream>
    #include <boost/thread.hpp>
    using namespace std;
    
    int main()
    {
        cout << "Hello world!" << endl;
        return 0;
    }
    

    EDIT://
    Jedenfalls findet er sowohl das include als auch die Lib



  • Irgendwie versteh ich das ganze nicht, ich hab die ganzen Boost files und die tu ich einfach in den ordner wo der include path hinzeigt compilier und er meint cannot find lboost_thread ( ld.exe) . Muss ich irgendwie was compilieren ich kann doch die ganzen files nicht zu meinem Projekt hinzufügen , gibt es nicht eine andere weiße das mit den Threads zu machen außer boost wo man nichts hinzufügen muss ?



  • Du sollst die boost-Header nicht in den include-Path kopieren!

    Du must den Inckude-Path so umstellen dass er auch auf die boost-Header zeigt und den Libpath, dass der auch auf die boostLibs zeigt.

    Was für eine IDE hast du eigentlich?



  • Meine ENtwicklungs umgebung ist COde::Blocks und der COmpiler GCC Gnu



  • Win als Platform oder Linux?

    Settings->Compiler&Debugger->Search Directories

    Bei Compiler trägst du das Verzeichniss mit den Headern ein; bei Linker das Verzeichniss mit den Compilierten Libs.



  • Linking console executable: ..\bin\console.exe
    ..\bin\.objs\src\World\Bo.o:Bo.cpp:(.text+0xf0b): undefined reference to boost::thread::thread(boost::function0<void, std::allocator<boost::function_base> > const&)' ..\\bin\\.objs\\src\\World\\Bo.o:Bo.cpp:(.text+0xfb3): undefined reference toboost::thread::~thread()'
    ..\bin\.objs\src\World\Bo.o:Bo.cpp:(.text+0x1092): undefined reference to `boost::thread::~thread()'

    http://www.imagehack.eu/de/uploads/9b11c79c61.jpg

    Operating System is WIndows



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

Anmelden zum Antworten