AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Verständnisfrage: Programmablauf ohne Unterbrechung?
Thema durchsuchen
Ansicht
Themen-Optionen

Verständnisfrage: Programmablauf ohne Unterbrechung?

Ein Thema von changlee · begonnen am 13. Feb 2010 · letzter Beitrag vom 16. Feb 2010
Antwort Antwort
changlee
(Gast)

n/a Beiträge
 
#1

Verständnisfrage: Programmablauf ohne Unterbrechung?

  Alt 13. Feb 2010, 14:02
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
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Verständnisfrage: Programmablauf ohne Unterbrechung?

  Alt 13. Feb 2010, 14:10
TThread.onTerminate wird synchronisiert aufgerufen. Das bedeutet in dem speziellen Fall, das die Methode MAchWas erst zu Ende abgearbeitet wird.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
changlee
(Gast)

n/a Beiträge
 
#3

Re: Verständnisfrage: Programmablauf ohne Unterbrechung?

  Alt 13. Feb 2010, 14:15
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?)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Verständnisfrage: Programmablauf ohne Unterbrechung?

  Alt 14. Feb 2010, 12:10
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.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
changlee
(Gast)

n/a Beiträge
 
#5

Re: Verständnisfrage: Programmablauf ohne Unterbrechung?

  Alt 16. Feb 2010, 16:26
sehr gut. Danke!
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:44 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