Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Auf Beendigung einer Methode warten (https://www.delphipraxis.net/129437-auf-beendigung-einer-methode-warten.html)

matashen 19. Feb 2009 11:28

Re: Auf Beendigung einer Methode warten
 
Sirius beschreibt das richtig,

Wenn innerhalb eines Programms Arbeiten zu erledigen(Objecte/Methoden) sind dann kann dies technisch nur nacheinander funktionieren. Es kann genausowenig wie ein Thread aufgeteilt werden. Aufteilen geht nur mit mehreren Threads wenn mehrere Prozessoren(oder Kerne) vorhanden sind und dies auch vom Betriebssystem unterstützt wird. Dürfte bei allen modernen Systemen aber der Fall sein denn das aufteilen der Threads managed das BS und nicht die Hardware. Ein einzelner Thread oder Programm kann niemals aufgeteilt und teile davon parallel bearbeitet werden.

Das Problem was du mit deiner Datei hast liegt im Windows begraben. Da eine geschlossene datei nicht sofort vom Filesystem freigegeben wird, deine Anwendung hat ja erstmal den Fukos und somit priorität. Alle Funktionen im System werden eben nacheinander abgearbeitet. Das heist zuerst kommen deine 3 Paintaktionen und dann das Dateischließen sobald dein Programm auf die nächste Message vom Windows wartet. Es sei denn du würdest die Datei selber schließen, was aber blödsinn wäre. Wenn du ein Sleep einbaust dann wird dem Betriebssystem Zeit gegeben in der Programmpause was anderes zu machen und damit wird eine andere Aufgabe dazwischengeschoben - zum beispiel das schließen der Datei was noch vom Filemanager ansteht.

Zum problem:
warum lädst du dein Bild nicht in einen Container und zeichnest von dort aus (TBitmap)


Gruß Matthias

Bomberbb 20. Feb 2009 09:03

Re: Auf Beendigung einer Methode warten
 
Ok, wieder was gelernt. Ich hab auch mal genauer nachgelesen:
Zitat:

Parallelität kann in objektorientierten Sprachen auf unterschiedliche Weise
realisiert werden. ...
1. Ausführungsstränge wechseln zwischen Objekten:...
Trifft ein Ausführungsstrang auf einen Methodenaufruf, wechselt er vom Sender- zum Empfängerobjekt und kehrt erst nach
Bendigung der Methode zurück. ...
2. Jedes Objekt hat seinen eigenen Ausführungsstrang:
Ich bin bis jetzt immer vom Fall 2 ausgegangen. Fall 1 trifft wohl eher zu... Werde jetzt mal schauen, ob ich ohne das öffnen der Dateien auskomme.

Sir Rufo 20. Feb 2009 09:48

Re: Auf Beendigung einer Methode warten
 
BTW: Die CriticalSection kannst du auch getrost rauslassen, denn die helfen dir hier nicht.

Ein Prozess kann eine CriticalSection so oft betreten wie er möchte (nur andere Prozesse können nicht gleichzeitig).

Einen anderen Prozess bekomme ich aber nur mit Threads, und die sind für VCL doof, also sind die CS überflüssig.

cu

Oliver

mquadrat 20. Feb 2009 09:56

Re: Auf Beendigung einer Methode warten
 
Zitat:

Zitat von Bomberbb
Ich habe bis zu 3 Zeichenflächen nebeneinander, auf denen unterschiedliche Darstellungen wiedergegeben werden. Sie dürfen nicht zur gleichen Zeit zeichnen, da sie alle auf die selbe Datei zugreifen. Und hier kommt es zum Fehler, wenn ich
Delphi-Quellcode:
Zeichenflaeche1.paint;
Zeichenflaeche2.paint;
Zeichenflaeche3.paint;
aufrufe, ist die Datei in Benutzung. Wenn ich ein Sleep(500) dazwischensetze, ist alles ok. ?

Entweder die Datei puffern oder die Datei nicht exklusiv öffnen oder zwischen den Paint-Aufrufen einfach in einer Schleife solange prüfen, bis die Datei wieder freigegeben ist.

Bomberbb 20. Feb 2009 10:05

Re: Auf Beendigung einer Methode warten
 
Ok, die CS hab ich schon rausgenommen. Und werde nun auch die Datei puffern.

Auf jeden Fall danke für die neuen Erkenntnisse... ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:24 Uhr.
Seite 2 von 2     12   

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