AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Probleme mit Enter/LeaveCriticalSection
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Enter/LeaveCriticalSection

Ein Thema von noisy_master · begonnen am 20. Sep 2016 · letzter Beitrag vom 22. Sep 2016
 
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.358 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Probleme mit Enter/LeaveCriticalSection

  Alt 21. Sep 2016, 13:36
Ein solcher Lock könnte so aussehen:

Delphi-Quellcode:
Flag := False;
while (not Flag) do;
Der Mainthread macht ungefähr so etwas:
Delphi-Quellcode:
repeat
 TastaturAbfragen;
 MausAbfragen;
 EreignisseAbfragen;
 ControlsZeichnen;
 ProgrammCodeAusführen;
until WennProgrammGeschlossen
ProgrammCodeAusführen reagiert z.B. mal auf das Klicken eines Buttons oder auf das Feuern eines Timers.

Wenn ProgrammCodeAusführen lange dauert, dann kann der Rest erst mal auch nicht mehr erfüllt werden und das Programm "hängt".
Wenn Du im Mainthread o.g. Lock verwendest kommt das Programm nie mehr raus, da Flag nie auf True gesetzt werden wird.

Ohne nebenläufige Threads, die das Flag wieder umschalten, kann man so etwas also nicht umsetzen.

Ich hoffe, dass das nicht ganz falsch ist (wenngleich natürlich stark vereinfacht).




Eine Überlegung zum ProcessMessages:

Wenn im ProgrammCodeAusführen Application.ProcessMessages aufgerufen wird, werden unbehandelte Messages abgearbeitet.
Dazu wird ProgrammCodeAusführen unterbrochen und ggf. rekursiv erneut aufgerufen.
Ist das so richtig?


Insofern dürften die Timer im Beispiel die Logs nicht mehr durcheinander bringen, wenn man das ProcessMessages weg lässt, da sich die Timerbehandlungen dann immer schön in den Kreislauf des Mainthreads einfügen und kein rekursiver Aufruf erfolgen kann.

Richtig? (Ich kann das jetzt nicht testen)
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)

Geändert von stahli (21. Sep 2016 um 15:17 Uhr)
  Mit Zitat antworten Zitat
 

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:46 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz