AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Alternative zu Sleep

Ein Thema von EWeiss · begonnen am 29. Jan 2007 · letzter Beitrag vom 30. Jan 2007
Antwort Antwort
Seite 2 von 2     12
EWeiss
(Gast)

n/a Beiträge
 
#11

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 12:00
PUSH .. Sorry ja ich weiss

Was mich an der ganzen sache doch sehr verwundert.
Das fast gleiche Projekt in Visual Basik/Delphi geschrieben
Visual Basik macht keine thread probleme ist um ein vielfaches schneller was den aufbau der Bitmap
Container Form für die Winamp Visualisierung angeht.
In Delphi kann ich sehen wie träge sich die Form beim aufbau verhält.

Eigentlich sollte das umgekehrt sein da die DLL und das Projekt in Delphi geschrieben sind.
Miniaturansicht angehängter Grafiken
screen_102.jpg  
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 12:04
Zitat von sirius:
Ich hätte jetzt mal spontan auf waitforsingleobject getippt
Werde das mal testen und an stelle von Sleep verwenden...

gruß
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#13

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 12:13
Hi

Ich vermute, Du hast einen 'Denkfehler': Du kannst doch nicht irgendwie eine konstante Zeit warten, bis jemand anderes mit seiner Arbeit fertig ist. Ich meine, natürlich kannst Du das, aber das ist eben nicht richtig.
Ebensowenig, wie in der Hauptanwendung 'sleep' aufzurufen.

Na gut, im Prinzip benötigst Du so etwas:

Code:
...
  Task1;
  Wait Until Task1 is finished;
  Task2;
  Wait Until Task1 is finished;
...
Verstehe ich das richtig? Und die Tasks sind einzelne Threads, richtig?

Du könntest eine Kette einrichten, sodaß Task1 über sein 'OnTerminate'-Ereignis Task2 anstößt, der wieder Task3 usw.

Dann musst Du nur Task1 starten und die Welt ist 'vordergründig' in Ordnung, denn alle Tasks laufen ja im Hintergrund (wenn die Tasks als Threads deklariert sind).

Ansonsten gäbe es noch die Möglichkeit, die Synchronisation der Tasks/Threads mit Events zu steuern. Das empfiehlt sich dann, wenn die Threads zwischendurch mal eine Teillösung fertig gestellt haben, und einem anderen Thread mitteilen sollen, das der jetzt weitermachen kann.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#14

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 12:57
Ich schließe mich Alzaimar an.

DU machst einen Denkfehler, bzw. gleich mehrere

1.) du meinst das Delphi an einer Sache Schuld ist die es nicht verzapft hat, Windows ist Ereignisorientiert wie auch Linux und da kann man nicht einfach mal so eine Zwangspause per Sleep() einlegen. Bzw. man kann es es ist aber absolut kontraproduktiv. Man nimmt dann einen Timer -> Ereignisorientiert
Du beschwerst dich also über eine Funktionsweise die absolutes Grundlagenwissen ist heutzutage.

2.) Wenn du denoch eine Zwangspause einlegen möchtest und mit "Delay revisited" die Anwendung nicht einfrieren lässt, was du ja auch haben möchtest, dann sind alle Ereignisbasierten Methoden, also auch .OnClick() NICHT mehr reentrant. Sie können also "verschachtelt" aufgerfuen werden wärend sie mit Delay() noch warten. Auch dies ist eine Folge eines Ereignisorientierten Systemes und ganz normal. DU hast dich also darum zu kümmern das der Aufruf von Delay() wieder reentrant wird, wenn du das schon benutzen möchtest. Dazu legst du eine Variable in deinem Form an, einen Zähler den du inkrementiert vor Delay() und dekrementierst nach Delay(). Solange dieser Zähler gleich Null ist darfst du Delay() aufrufen ansonsten kehrt deine OnClick() Methode ohne Aktionen sofort zurück. Noch besser ist es aber den Button der das OnClick() aufruft zu disablen, vergiß auch nicht das OnClose() des Form zu berücksichtgen.

Ergo: möchte man warten und das dabei die Anwendung nicht einfriert so muß man asynchron zum Normalablauf des Programmes Application.ProcessMessages aufrufen. Wenn man dies tut so muß man damit leben das alle Botschaftsorientierten Methoden auch nicht mehr Reentrant sind, das betrift auch die Freigabe der Formulare (hier sind bei falscher Anwendung Exceptions zu erwarten).

Das Grundproblem beginnt aber schon damit das der Programmierer in einem Ereignisorientiertem System innerhalb einer Eregnismethode eine Zwangspause einlegen möchte. Diese Sichtweise ist falsch.

Gruß Hagen
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#15

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 13:10
@Sirius
Zitat:
Werde das mal testen und an stelle von Sleep verwenden...
Ja so läuft es besser zumindest geht der aufbau der Form schneller von statten.

@alzaimar
Task/Thread das ist die Frage und ob ich warten muss oder nicht.
Theoretisch brauchte ich das nicht.

Delphi-Quellcode:
procedure TfrmMain.optGenClick(Sender: TObject);
begin
  // Terminate Plugin
  frmMain.Button2Click(Sender);
  // Wait befor new Plugin run.
  Delay(200);

  frmMain.Button1Click(Sender);
  // Wait new Plugin initialized
  Delay(200);
  // Play
  frmMain.Button6Click(Sender);
end;
Wenn ich das Button2Click event auslöse kann und muss ich davon ausgehen das dieses erst abgearbeitet wird bevor
das Button1Click event ausgelöst wird.
Allerdings arbeitet das Plugin BassVis immer noch im Hintergrund und ist mit der terminierung des Winamp Plugin beschäftigt.
Deshalb das Delay hinter Button2Click.

Das bedeutet!
Ist der Thread in BassVis nicht beendet und ich führe eine neue Funktion aus dann kommt es zu problemen
Aber ob das nun mit dem zeichnen der Bitmaps etwas zu tun hat das ist die Frage.
Dürfte es eigentlich nicht.

Der Fehler ist wieder aufgetreten in dem Moment wo ich den RenderTimer für die Winamp Plugins erhöht habe.
Sehr seltsam das ganze.
In VB habe ich die Probleme alle nicht. (Soll jetzt kein vergleich mit Delphi sein) sondern lediglich
ein Hinweis das es dort geht und in Delphi nicht.

Habe das project ja gestern hochgeladen.. hat aber nur 1 geladen.
Nur wie will jemand helfen wenn er sich nicht mal das Project läd und es sich anschaut.

So sieht es nun aus.
Wenn Timing probleme auftreten.

gruß
Miniaturansicht angehängter Grafiken
fehler_734.jpg  
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 13:16
@Hagen

Zitat:
du meinst das Delphi an einer Sache Schuld ist die es nicht verzapft hat
Nein! Ganz deutlich nochmal falls da etwas verkehrt herübergekommen ist.

Mir geht es nicht darum wer das problem verursacht
sondern darum warum es auftritt.
Deshalb hatte ich ja auch den Source gestern hochgeladen damit es sich jemand anschauen kann.

Es geht auch jetzt nicht um Delphi/Vb sondern darum das es auf der einen Seite geht und auf der anderen nicht.
Obwohl die gleiche DLL das gleiche Plugin und die gleichen Routinen(in etwa) verwendet werden.

Das begreife ich nicht.

gruß
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#17

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 13:40
Zitat von EWeiss:
Habe das project ja gestern hochgeladen.. hat aber nur 1 geladen.
Nur wie will jemand helfen wenn er sich nicht mal das Project läd und es sich anschaut.
Ich bin blind. Wo denn?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 14:24
Zitat von alzaimar:
Zitat von EWeiss:
Habe das project ja gestern hochgeladen.. hat aber nur 1 geladen.
Nur wie will jemand helfen wenn er sich nicht mal das Project läd und es sich anschaut.
Ich bin blind. Wo denn?
Hat sich erledigt habe den Fehler gefunden was die Bitmaps angeht.

gruß
  Mit Zitat antworten Zitat
Benutzerbild von Michael Habbe
Michael Habbe

Registriert seit: 10. Aug 2005
264 Beiträge
 
Turbo Delphi für Win32
 
#19

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 17:47
Zitat von EWeiss:
Hat sich erledigt habe den Fehler gefunden was die Bitmaps angeht.

gruß

Und? Was wars???
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 17:59
Zitat von Michael Habbe:
Zitat von EWeiss:
Hat sich erledigt habe den Fehler gefunden was die Bitmaps angeht.

gruß

Und? Was wars???
Der unterschied zwischen VB und Delphi ist das VB bei der initialisierung der Form automatisch in die
FormResize event springt bei Delphi ist das nicht so.
Deshalb fehlten mir die coordinaten der Bitmaps die dann nicht auf die richtige position gesetzt wurden.
Habe es nun umstruckturiert so das Delphi dazu gezwungen wird in diese procedure zu springen.

Seltsamerweise funktionierte es ja ab und zu.
Frag mich jetzt nicht warum .. KA

Hier ist der Source und ein Pic
Für verbesserungs vorschläge bin ich immer zu haben.

gruß
Miniaturansicht angehängter Grafiken
working_818.jpg  
Angehängte Dateien
Dateityp: rar winamptest_182.rar (491,0 KB, 30x aufgerufen)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:09 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