Programmaufruf + weiterarbeiten
-
Hiho
Habe ein sehr sonderbares Problem:
Ich habe unter .NET eine MFC-Anwendung auf Dialogfeldern basierend erzeugt.Nun habe ich ein Dialogfeld (nicht modal), welches mir den Status des Vorgangs mit Hilfe einer Progressbar anzeigt (nennen wir es WndProgressBar).
Gleichzeitig läuft die Rechnung in dem rufenden Dialogfeld und übermittelt den Status an das Fenster mit der ProgressBar.
Es tritt nun ein Problem auf wenn ich die Bearbeitung mit CreateProcess erzeuge und mit WaitForSingleObject warte bis dieser Prozess abgearbeitet wurde (da sonst mehrere Zugriffe auf die selbe Datei auftreten). Das Fenster mit der ProgressBar soll weiterarbeiten können während das Vaterdialogfeld wartet, d.h. wenn man im WndProgressBar Abbrechen drückt, soll nach dem nächsten WaitForSingleObject in dem Vaterdialogfeld die Rechnung abgebrochen werden. Das nicht modale Dialogfeld reagiert aber leider nicht während man wartet, da WaitForSingleObject die komplette Applikation schlafen legtkleine Skizze des Codes (src-Code kann ich leider nicht rüberkopieren da auf anderem Netz):
//Funktion im Vaterdialogfeld
{
Anlegen des nicht modalen Fensters WndProgressBar
Aufrufen des Fensters WndProgressBarwhile (Dateien_vorhanden) {
//erhöht den Progressbalken im anderen Fenster
WndProgressBar.ProgressBar.StepIt();
//führe den Prozess aus und warte solange die Ausführung läuft
[...]
CreateProcess(...,Datei,...);
WaitForSingleObject(Prozess,INFINITY);
[...]
}
wndProgressBar.EndDialog();
}Während dessen im WndProgressBar:
//Beim Clickevent auf den Button Abbrechen
OnBnClickedBtCancel()
{
OnCancel();
}Das OnCancel wird erst ausgeführt nachdem alle Prozesse im Vaterdialog erzeugt und bearbeitet, sowie der Rest der Funktion abgearbeitet wurde!
Hat vieleicht Jemand einen hilfreichen Tipp, Vorschlag? Schonmal Danke im voraus
-
Es gibt prinzipiell zwei Ansätze:
1. Du verwendest einen Thread um den Prozess zu starten
2. Du verwendest MsgWaitForMultipleObjects: http://msdn.microsoft.com/library/en-us/dllproc/base/msgwaitformultipleobjects.asp Da musst Du dann aber bzgl. reentrancy aufpassen...
-
Ich danke schonmal für die Antwort und werde gleich mal weiter dran probiern.