kleine dialogbasierte Anwendung "blockiert" regelmäßig



  • hallo allerseits!

    ich hab zum testen einer großen Applikation ein kleines MFC- Dialog basiertes Progrämmchen gestrickt. Funktioniert auch. Leider (obwohl keine eigenen Threads enthalten) blockiert das Programm regelmäßig unter verschiedenen Szenarien:

    -nachdem in der Taskleiste auf den zugehörigen Task-Button gedrückt wurde (unregelmäßig)
    -wenn ein Kontextwechsel (anderes Fenster markieren und zurück) geschieht (auch unregelmäßig)

    Ich habe versucht einen "Minimieren Button" hinzuzufügen, da ich dachte, es läge an der mangelenden "Minimierbarkeit". Aber der Minimize-Button erscheint nicht am Fensterrand. Kann es was damit zu tun haben? Mein Tracing zeigt keine ungewöhnlichen "Blocks" in meinen Funktionen-- alle beenden sich. Nur irgendwann geht einfach nix mehr (Fenster kann nicht mehr fokusiert werden)

    Das Programm läuft unter Umständen mehrere Stunden laufen, ohne zu blockieren. Memory leaks sind auch keine (wegen eventuell Speicher voll oder so).

    Ideen? Ich hab vorher noch keien Dialog-based Apps gebaut-- kenn die "pitfalls" net.

    danke für jeden tipp.



  • Wenn das mal wieder passiert, drück doch einfach auf "Pause" und guck wo im Quelltext du so bist. 🙂
    (Dafür musst du mit F5 starten.)



  • ist das ne VC++ funktion?
    du meinst doch die funktions-taste "Pause" oder?
    geht der debugger dann automatisch an die code-stelle? --> krass wenn so wär! 🙂



  • Neeee, nicht die Funktionstaste. 😃

    In der Symbolleiste im VC++ ist eine Taste, die ein Pausezeichen drauf hat. DA musst du draufdrücken. Sonst hast du das aber richtig erkannt. 🙂
    Versuch mal Strg+Alt+Pause, wenn das VC aktiv ist und dein Programm mal wieder hängt.



  • also mit "pause" komm ich auch net weiter. der springt in die window-proc message handler funktion ... MFC- code.

    ich hab jetzt rausgefunden, dass, wenn ich meinen Timer, der am dialog hängt, abschalte.. dann läufts bisher ohne blocking.
    problem ist nur: mein timer tut nix ausser ein icon neu laden (alle zwei sekunden).

    das programm scheint in einer endlosschleife in der message- proc zu sein.

    was kann das sein?



  • Wie sieht denn der Callstack aus?

    Du kannst dir ja anzeigen lassen, welche Funktion von welcher mit welchen Parametern aufgerufen hat und welche die wieder aufgerufen hat...
    In dieser Liste kannst du per Doppelklick auf eine Zeile in die jeweilige Funktion springen. Guck mal, ob da eine Funktion von dir zu sehen ist und spring da rein. Vielleicht erkennst du ja dann etwas. 🙂

    Was passiert, wenn du das Timerintervall größer machst? Einfach mal 5 oder 10 Sekunden als Test. Vielleicht malt der einfach zu lange? 😉


Anmelden zum Antworten