AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Auf Beendigung einer Methode warten

Ein Thema von Bomberbb · begonnen am 19. Feb 2009 · letzter Beitrag vom 20. Feb 2009
Antwort Antwort
Seite 1 von 2  1 2      
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#1

Auf Beendigung einer Methode warten

  Alt 19. Feb 2009, 08:53
Hallo,

folgendes Problem: Ich habe eine Klasse vom typ TCustomPanel abgeleitet um hierauf zu zeichen. Nun habe ich das Problem, dass die Objekte nicht gleichzeitig zeichnen dürfen. Habe das auch schon abgefangen. Das Problem ist, dass das Zeichnen der Panels einfach verworfen wird. Meine Idee wäre es, wenn ich den anderen Objekten eine Nachricht schicke, wenn das Zeichnen beim ersten Objekt beendet ist. Oder gibt es eine Möglichkeit, das Zeichnen der anderen Objekte irgendwie in eine Warteschlange zu stellen?

Momentan sieht mein Quelltext so aus:
Code:
  ...
  CriticalSection.enter;
  if not Semaphor then
    Semaphor := true;
    fonPainting := true;
  CriticalSection.Leave;

  if fonPainting then
    Zeichnen;

  Semaphor := false;
  fOnPainting := false;
End;
  Mit Zitat antworten Zitat
worker
(Gast)

n/a Beiträge
 
#2

Re: Auf Beendigung einer Methode warten

  Alt 19. Feb 2009, 08:54
Threads
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Auf Beendigung einer Methode warten

  Alt 19. Feb 2009, 09:01
Zitat von worker:
Threads
Threads und Zeichnen auf GUI-Elemente ist bei der VCL eine ganz ganz schlechte Idee.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#4

Re: Auf Beendigung einer Methode warten

  Alt 19. Feb 2009, 09:07
An Threads hab ich auch schon gedacht, aber die Objekte selbst arbeiten schon parallel...
  Mit Zitat antworten Zitat
worker
(Gast)

n/a Beiträge
 
#5

Re: Auf Beendigung einer Methode warten

  Alt 19. Feb 2009, 09:08
Okay, wieder was dazu gelernt. (Hatte in Kunst 'ne 5 )
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.477 Beiträge
 
Delphi 12 Athens
 
#6

Re: Auf Beendigung einer Methode warten

  Alt 19. Feb 2009, 10:04
Zitat von Bomberbb:
Hallo,

folgendes Problem: Ich habe eine Klasse vom typ TCustomPanel abgeleitet um hierauf zu zeichen.
Mir ist nicht klar, warum du dafür eine eigene Ableitung von TCustomPanel benötigst.

Zitat von Bomberbb:
Nun habe ich das Problem, dass die Objekte nicht gleichzeitig zeichnen dürfen. Habe das auch schon abgefangen.
Also ich vermute du erstellst bei jeder Zeichenoperation ein neues Objekt, um die einzelnen Operationen nacheinander wiederholen zu können(z.B. wenn der Bildschirm aktualisiert wird) und um mehrere unabhängige Zeichenebenen darzustellen. In einem Thread passiert überhaupt nichts parallel und der einzige Thread der direkt mit der VCL arbeiten darf ist der Haupthread.

Zitat von Bomberbb:
Das Problem ist, dass das Zeichnen der Panels einfach verworfen wird. Meine Idee wäre es, wenn ich den anderen Objekten eine Nachricht schicke, wenn das Zeichnen beim ersten Objekt beendet ist. Oder gibt es eine Möglichkeit, das Zeichnen der anderen Objekte irgendwie in eine Warteschlange zu stellen?.
Hier gibt es scheinbar ein grundsätzliches Verständnisproblem wie Wincontrols funktionieren.
Jedes Wincontrol hat einen in der Regel rechteckigen Bildschirmbereich in dem es sich zu zeichnen hat.
Wird dieser Bereich von einem anderen Wincontrol zum Teil oder ganz überdeckt, so kann das Wincontrol in diesem Teil nicht zeichnen.

Zitat von Bomberbb:
Momentan sieht mein Quelltext so aus:
Code:
  ...
  CriticalSection.enter;
  if not Semaphor then
    Semaphor := true;
    fonPainting := true;
  CriticalSection.Leave;

  if fonPainting then
    Zeichnen;

  Semaphor := false;
  fOnPainting := false;
End;
Obwohl das nichts mit dem eigentlichen Problem zu tun hat, eher so:

Code:
  ...
  if not Semaphor then
  begin
    Semaphor := true;
    fonPainting := true;
  end
  ...
Ich würde die Zeichenobjekte von TGraphicControl ableiten.
Schau dazu einfach mal die Quellen von TShape und TBevel an.
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#7

Re: Auf Beendigung einer Methode warten

  Alt 19. Feb 2009, 10:19
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.

Soweit ich weiß arbeiten Objekte doch zeitlich (quasi)parallel. Warum sollten Sie dann nicht zeitgleich zeichnen oder zumindest die Berechnungen fürs zeichnen zeitgleich durchführen?
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Auf Beendigung einer Methode warten

  Alt 19. Feb 2009, 10:27
Objekte arbeiten nicht parallel. Threads arbeiten parallel.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Bomberbb

Registriert seit: 23. Sep 2003
227 Beiträge
 
#9

Re: Auf Beendigung einer Methode warten

  Alt 19. Feb 2009, 10:33
Dazu mal ein Zitat aus meinen Studienunterlagen zum Thema oop:
Zitat:
Parallelität bedeutet in diesem Grundmodell,
dass möglicherweise mehrere Nachrichten gleichzeitig unterwegs
sind und mehrere Objekte gleichzeitig Methoden ausführen.
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Auf Beendigung einer Methode warten

  Alt 19. Feb 2009, 10:40
Ich habe sowas zwar nie studiert, aber rein aus praktischer Sicht und ohne Kontext ist das erstmal falsch.
In einem Modell kann man das vielleicht so betrachten, aber...

Wenn du nur einen Thread (MainThread) hast, dann wird definitiv nur eine Methode abgearbeitet und dann die nächste. Die Messages werden gepuffert und nacheinander (entspr. ihrer Prioritäten) abgearbeitet.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 19:40 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