MFC Threadsicher; Synchronisation
-
Hi!
Ich habe zwei Fragen:- Sind die Klassen der MFC (vor allem CEdit, CButton, CStatic und CRichEditCtrl) eigentlich threadsicher?
- Ich habe einen Dialog, der durch einen Buttondruck einen Thread startet. Durch einen anderen Buttondruck soll dieser Thread dann beendet werden. Bevor der Thread aber beendet wird, soll er noch einige Aktionen durchführen können. Wie ist das realisierbar?
MfG, phreaking
[ Dieser Beitrag wurde am 02.11.2002 um 09:03 Uhr von phreaking editiert. ]
-
Hi,
also sicher wissen tu ich das Folgende nicht, hatte aber bis jetzt auch nie Probleme mit dieser Verfahrensweise:
Grundsätzlich sind alle Klassen der MFC threadsafe. Wenn sie es nicht sind oder die Entwickler nicht sicher sind, dann ist das in der MSDN vermerkt (z.B. DAO <- nicht threadsafe!).
Die von dir genannten Klassen gehen auf jeden Fall. Das kann ich aus eigener Erfahrung berichten (bis auf RitchEdit, das habe ich noch nicht getestet).
Deine 2. Frage solltest du mal etwas konkreter stellen.
Grundsätzlich gilt:
Dialog starten - Workerthread starten (- Synchronisation nicht vergessen z.B. WaitForSingleObject!) - Workerthread beenden - Dialog beenden

Gruß, Volle.
-
CEdit, CButton ... sind zwar Klassen der MFC, aber sie alle kapseln nur API-Steuerelemente. Da diese über Messages angesprochen werden (also nicht direkt), sind sie threadsicher
-
Danke!
Bezüglich meiner zweiten Frage: im Thread wird zB mit new Speicher allokiert. Wenn der Thread beendet werden soll, muss der Speicher natürlich wieder freigegeben werden.
Ich habe mir das so in der Art vorgestellt:while((Aufgabe noch nicht vollständig gelöst)&&(Thread soll noch nicht beendet werden)) { löse Teilaufgabe (new, ...) } gebe Resourcen frei (delete, ...) return;Nur weiß ich eben nicht, wie ich die zweite Bedingung der Schleife realisieren soll, denn diese soll ja vom anderen Thread gesetzt werden.
MfG, phreaking
-
Wie wärs mit einem Flag, das der andere Thread setzt? Wenn der Schleifenkörper sehr lang ist, könntest Du ja auch noch zwischendurch auf das Flag testen.
[ Dieser Beitrag wurde am 03.11.2002 um 10:23 Uhr von MFK editiert. ]
-
Und welches Mittel empfiehlt sich zur Synchronisation?
MfG, phreaking
-