Keine Rückmeldung wenn in Schleife

Frido

Grünschnabel
Ich habe mir für mein Programm eine Funktion geschrieben das mir in der Datenbank das Datumsformat in ungefähr 3000 Datensätzen umdrehen soll.

funktioniert auch soweit ganz gut.

Ich habe nur folgendes Problem:

Ich mache das ganze mit Hilfe einer While-Schleife. Das ganze dauert auch (verständlicherweise) ein paar Minuten. Aber während das Programm in dieser Schleife hängt sendet es scheinbar keine Rückmeldung mehr an Windows. Dialog "sofort beenden" erscheint wenn der user irgendwo aufs Fenster klickt.

Kann ich irgendwie per Code eine Meldung senden das soetwas nicht passiert?

Danke im Voraus für eure Hilfe
 
Setz irgendwo in die Schleife ein "Sleep( 100 )" rein. Das gibt dem Programm die Gelegenheit, Windowsnachrichten zu verarbeiten.
 
Hab ich schon versucht aber das geht scheinbar nicht. Offenbar sendet das Programm überhaupt keine Meldung während der Schleife.
 
Du musst innerhalb der Schleife eine MessagePump haben. Vor zwei Tagen habe ich das irgendwo in einem Thread gezeigt.
Im Prinzip musst du regelmässig AfxMessagePump aufrufen (oft genug, um die ganzen Windowsnachrichten weiterzubearbeiten).
 
Herzlichen Dank !

Hab deinen Thread gefunden.

Ich hab jetzt einfach ein "theApp.PumpMessage();" in jeden Schleifendurchlauf eingefügt.
Dauert zwar jetzt eine Spur länger aber ist zufriedenstellend.

Wer hätte gedacht das es so einfach ist.
 
Das Langsam-sein kommt vermutlich daher, dass theApp.PumpMessage wartet, bis eine Nachricht da ist, und die dann verarbeitet. Wenn sich natürlich sonst nix tut, wartet dein Programm da drin. (Merkt man am besten, wenn alles schneller läuft, wenn man die Maus rumschiebt).
In dem Fall würde ich auf die handgestrickte MessagePump umsteigen, die ein PeekMessage mit PM_NOREMOVE aufruft, und bei keiner Nachricht in der Schleife sofort zurückkommt.
 

Neue Beiträge

Zurück