Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Verständnisfrage: Programmablauf ohne Unterbrechung? (https://www.delphipraxis.net/147660-verstaendnisfrage-programmablauf-ohne-unterbrechung.html)

changlee 13. Feb 2010 13:02


Verständnisfrage: Programmablauf ohne Unterbrechung?
 
Hallo,

wie sicher kann ich mir eigentlich sein, dass der Code einer Prozedur wirklich immer an einem Stück abläuft:


Delphi-Quellcode:

var sl: TStringList;

procedure MachWas;
var i:integer;
begin
  i := sl.items.indexof('test');
  // hier unterbrechung möglich?
  sl.items[i] := 'test2'
end;


procedure ThreadIstZuEnde;
begin
  sl.clear;
end;
Was ist, wenn die Prozedur ThreadIstZuEnde im OnTerminate Ereignis eines Threads aufgerufen wird und der Thread zufällig genau nach der indexof-Zeile in der MachWas Prozedur zu ende ist.
Wartet ThreadIstZuEnde, kein Code mehr abgearbeitet wird und statet dann?
Gibt es sozusagen einen Aufruf Stack? Also alles was vor dem OnTerminateEreignis bereits aufgerufen wurde, aber noch nicht anfangen konnte, wird abgearbeitet?

Oder wartet ThreadIstZuEnde immer solange, bis der Hauptthread gar nichts mehr zu tun hat und wird erst dann ausgelöst?

Gruß,
changlee

sirius 13. Feb 2010 13:10

Re: Verständnisfrage: Programmablauf ohne Unterbrechung?
 
TThread.onTerminate wird synchronisiert aufgerufen. Das bedeutet in dem speziellen Fall, das die Methode MAchWas erst zu Ende abgearbeitet wird.

changlee 13. Feb 2010 13:15

Re: Verständnisfrage: Programmablauf ohne Unterbrechung?
 
ja, ich weiß, sie läuft im hauptthread ab.

aber wann genau? wenn der Hauptthread wieder komplett frei ist, oder nach reihenfoge der eingegangenen Prozeduraufrufe nach dem das ereignis ausgelöst wurde?

Angenommen in der Prozedur Machwas werden noch weitere Prozeduren aufgerufen und dies auch erst nachdem das Ereignis ausgelöst wurde. Was wird dann zuerst aufgerufen?

Und kann ich mir 100 prozentig sicher sein, das eine Prozedur niemals wür ein anderes Ereignis unterbrochen wird? (Solange ich nicht application.Processmessages verwende?)

sirius 14. Feb 2010 11:10

Re: Verständnisfrage: Programmablauf ohne Unterbrechung?
 
Du kannst dir sicher sein (außer eben bei Application.ProcessMessages), dass erst alle deine Prozeduren innerhalb von Machwas abgearbeitet werden.
Dass beim Aufrufen von anderen Methoden irgendetwas auf Grund von Ereignissen passiert ist nur bei der aspektorientierten Programmierung der Fall. Bei der objektorientierten Programmierung, gibt es so etwas nicht.

changlee 16. Feb 2010 15:26

Re: Verständnisfrage: Programmablauf ohne Unterbrechung?
 
sehr gut. Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz