CDialogEx aus CFormView als UI-Thread aufrufen
-
Hi!
Nachdem ich mein Dialogfenster (CDialogEx) erfolgreich gebaut habe, ist dieses nun in den restlichen Sourcecode eingebaut worden - welcher nicht von mir ist.
Und zwar sieht es jetzt folgendermaßen aus:
Es gibt eine CFormView Klasse. In dieser wird eine "MachDas" Klasse instanziiert, der ein Pointer auf die CFormView Klasse übergeben wird. Die "MachDas" Klasse ruft dann irgendwann meinen Dialog mit DoModal() auf und der Dialog kann dann über CallBack Methoden diverse Aktionen in der "MachDas" Klasse anstoßen.
So weit funktioniert das auch. Leider ist es nun so, dass in der CFormView an einer Stelle eine ziemlich lang dauernde Operation angestoßen wird und wärenddessen mein Dialog nicht mehr bedienbar ist. Klickt man zu oft irgendwo hin fragt Windows sogar, ob man die nicht reagierende Applikation beenden will. Was ich leider nicht ändern kann ist der Aufruf der zeitaufwändigen Operation in der CFormView. Weil die hätte man als Worker-Thread laufen lassen sollen.
Daher war meine Idee, ich starte meinen CDialogEx "einfach" als UI-Thread... aber was ich dazu im Netz lese klingt immer mega kompliziert und das eine CFormView ein CDialog als Thread startet habe ich spontan nicht wirklich gefunden.
Was wäre denn hier ein einfacher Ansatz?
-
Verpack die "lange dauernde Operation" in einen Thread, damit bleibt der View bedienbar. Musst dir nur überlegen, was mit dem Thread passiert, wenn der View geschlossen wird. Und du musst den Zugriff auf gemeinsam benutzt Daten synchronisieren, damit der View nicht gerade was liest, während der Wert vom Thread verändert wird.
-
Ich würde von einem eigenen UI Thread abraten.
Ist auch nicht nötig. Siehe Antwort von DocShoe
-
@DocShoe sagte in CDialogEx aus CFormView als UI-Thread aufrufen:
Und du musst den Zugriff auf gemeinsam benutzt Daten synchronisieren, damit der View nicht gerade was liest, während der Wert vom Thread verändert wird.
FTFY
-
@hustbaer sagte in CDialogEx aus CFormView als UI-Thread aufrufen:
@DocShoe sagte in CDialogEx aus CFormView als UI-Thread aufrufen:
Und du musst den Zugriff auf gemeinsam benutzt Daten synchronisieren, damit der View nicht gerade was liest, während der Wert vom Thread verändert wird.
FTFY
Gut aufgepasst, hier dein Fleißkärtchen