loop



  • Hi,

    Ich muss eine loop schleife in mein Programm einbinden die nicht das ganze Programm aufhält!

    #include <windows.h>
    void run();
    
    void main() {
    run() 
    }
    
    void run() {
    bool running = true;
    
    while(running) {
    ....
    }
    }
    

    Bringt mein ganzes Programm zum laggen!

    Gibt es da eine alternative, denn ich muss überprüfen ob eine taste:

    if(GetAsyncKeyState(VK_NUMPAD1)&1==1) {
    //...
    }
    

    gedrückt wurde, da mir nur diese lösung mit der dauerhaften while einfällt bringt mir das nicht weil das ganze programm laggt! Gibts da noch nen anderen weg?



  • Du müßtest Rechenleistung in deiner while freigeben mit Sleep oder so. Und/oder das in einen eigenen Thread verlagern.

    Gruß



  • Gibt's da irgendwo ein beispiel. bzw könntest du mir hier helfen:

    LRESULT CALLBACK HookedWindowProcedure(HWND,UINT,WPARAM,LPARAM);
    WNDPROC original_window_procedure;
    void callback();
    
    void main() {
    
    callback();
    }
    
    void callback() {
    	original_window_procedure = (WNDPROC)SetWindowLong(handle_window,GWL_WNDPROC,(long)HookedWindowProcedure);
    }
    
    LRESULT CALLBACK HookedWindowProcedure(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)
    {
    //.....
    return CallWindowProc(original_window_procedure,hwnd,message,wParam,lParam);
    }
    

    So in etwa dürfte das doch funktionieren oder?



  • Könnte, aber da mir nicht bekannt is, was Du machen willst, is die Frage jetzt ob das der richtige Weg is. So wie das jetzt aussieht, willst Du in die Messagemap eines anderen Windows eingreifen bzw. dort was abfangen.

    PS: Vergess dann nicht am ende die org. Window_Procedure wieder zu setzten.



  • MFC ist das eher nicht...
    Wohin möchtest du geschoben werden? WinAPI oder Konsole?
    😕



  • Such mal nach Threads, damit wird es sicher klappen.
    Schau mal hier nach http://www.henkessoft.de/ 🙂



  • @keni
    Ich hab zwar keine Ahnung, was du mit dem Hook vorhast. Aber um auf deine ursprüngliche Frage zurückzukommen, dazu reicht es, wenn du einfach Sleep(0) in deiner Schleife aufrufst. Ab NT4 gibts auch SwitchToThread().


Anmelden zum Antworten