Zugriff auf Objekte eines Formes



  • Hallo Leute,

    in Visual Studio kann man ja mit UpdateData(true/false), die Daten in den Objekten eines Forms aktualiesieren bzw. herausholen.

    Wie funktioniert das in Borland?

    ich mache folgende Anweisung in einem WinAPI Thread mit Borland.

    LPerSecond->Caption = AnsiString().sprintf("%.1f", fRatePerSecond);
    

    und bekomme immer mal eine exeption Leinwand erlaubt kein zeichnen. Wobei ich aber beim zugriff auf ein StringGrid keine Probleme habe.

    Wie kann ich vorgehen um dies zu verhindern?

    MfG



  • Ja, das ist eine der Tücken beim Multi-Threading. Man muss sicherstellen, dass man exklusiven Zugriff auf die Ressource hat. Aus einem Borland-Thread heraus könntest Du Synchronize() verwenden.

    Aus einem Win-API-Thread heraus sehe ich keine andere Möglichkeit, als die Ausgabe im Formular selbst zu machen und aus dem Thread heraus nur den Wert zu übergeben.
    Aber auch hier musst Du zwingend einen Zugriffsschutz einrichten. ZB eine CRITICAL_SECTION. Dies gilt auch für den Zugriff auf das StringGrid. Ein Zugriff, ohne Schutzmaßnahmen führt mit absoluter Sicherheit zu einem Problem, auch wenn es auf den ersten Blick zu funktionieren scheint. Früher oder später knallt es.


Anmelden zum Antworten