Callbackschleife überfordert?



  • hallo leute!
    folgende situation: man hat mit einer dll einen globalen hook gesetzt
    und lässt sich nun bei jedem gefragten ereignis eine Nachricht
    WM_USER ans hauptprogramm schicken. dort werden beim eintreten
    der nachricht einige funktionen aufgerufen:

    case WM_USER:
    funktion a();
    funktion b();
    funktion c();
    break;

    nur leider funktioniert das nicht bei jedem ereignis sondern
    nur bei 5aus20, ich hab irgendwie das gefühl die schleife
    hängt...wenn ich nur funktion a() benutze läuft alles zuverlässig?
    die funktionen an sich und der kontakt mit der dll laufen problemlos...
    vielleicht kennt ja jemand dieses performance-problem,
    bin mal gespannt 😉


  • Mod

    Verwendest Du SendMessage oder PostMessage. SendMessage synchronisiert die Prozesse und das kann sicherlich auch zum bockieren des gehookten Threads führen.
    Das allerdings nicht alle Nachrichten ankommen kann ich mir nicht vorstellen. Höchstens, dass Dein Hook das System extrem blockiert.



  • Hi

    Denke dein Hook ist für die Katze ! 😉

    lowbyte



  • hallo Martin,
    benutze PostMessage.
    hab das problem aber mittlerweile verstanden.

    @lowbyte_: der hook ist nicht das problem.

    funktion c() hat eine do-while schleife die
    eine weile braucht bis die bedingung eingetroffen
    ist. währenddessen kommt aber wieder eine WM_USER nachricht...
    meine neue frage wäre daher:
    kann man überhaupt eine Schleife einbauen bei der callbackfunktion
    wenn die abarbeitung eine weile dauert und neue ereignisse stattfinden?


  • Mod

    blablablub schrieb:

    funktion c() hat eine do-while schleife die
    eine weile braucht bis die bedingung eingetroffen
    ist. währenddessen kommt aber wieder eine WM_USER nachricht...
    meine neue frage wäre daher:
    kann man überhaupt eine Schleife einbauen bei der callbackfunktion
    wenn die abarbeitung eine weile dauert und neue ereignisse stattfinden?

    Du hast doch nur einen Thread. Solange Deine Schleife läuft wird gar nichts angenommen. Du hast noch nicht verstanden wie Nachrichten wirken und empfangen werden. Eine neue Nachricht unterbricht gar nichts! Eine neue Nachricht wird nur dann gelesen, wenn sie durch GetMessage abgeholt wird. Deine Schleife blockiert das ganze.


Anmelden zum Antworten