AGB  ·  Datenschutz  ·  Impressum  







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

Alternative zu Sleep

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

n/a Beiträge
 
#1

Alternative zu Sleep

  Alt 29. Jan 2007, 21:49
Hällöschen

Wieder mal mein leidiges problem mit Threads und darauf warten das sie abgearbeitet wurden.

In meinen Sample für BassVis muss ich einigemale die Anweisung Sleep verwenden.
Leider habe ich festgestellt das man sich darauf nicht verlassen kann.
Mal werden in der Form die Bitmaps richtig gezeichnet mal nicht.

Irgendwie kann das doch nicht das wahr sein.

Gibt es eine gute alternative bei der man sicher sein kann das der aktuelle thread beendet wurde
bevor eine neue funktion abgearbeitet wird?

Und das ohne Sleep?

Beispiel:

Delphi-Quellcode:
procedure TfrmMain.optDefaultClick(Sender: TObject);
begin
  // Terminate Plugin
  frmMain.Button2Click(Sender);
  Sleep(200);

  // Plugin initialized
  frmMain.Button1Click(Sender);
  Sleep(200);

  // Play
  frmMain.Button6Click(Sender);
end;
Ohne die Sleeps rennt das teil weiter das nächste Plugin wird initialisiert bevor das vorherige Plugin beendet wurde
das kann es irgendwo nicht sein.

Bei bedarf sende ich nochmal den Source.

gruß
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#2

Re: Alternative zu Sleep

  Alt 29. Jan 2007, 21:57
Delay revisitedDelay revisited ist meine Empfehlung, weiß aber nicht, ob das speziell auch bei Threads so gut funktioniert.
Gruß,
ManuMF

Endlich hab ich was Positives an Vista entdeckt: Das mitgelieferte Mahjongg
  Mit Zitat antworten Zitat
Benutzerbild von Michael Habbe
Michael Habbe

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

Re: Alternative zu Sleep

  Alt 29. Jan 2007, 22:07
Hi.

Wenn Du ein Sleep in der Hauptanwendung aufrufst, bleibt dann nicht die ganze Anwendung incl. Threads für diese Zeit stehen?
Schon mal daran gedacht, eine Variable zu benutzen, die vom Thread geändert wird, wenn dieser sich terminiert? Und dann vielleicht in dieser Form prüfen:
while ThreadNotTerminated do Application.ProcessMessages Wo werden denn die Bitmaps gezeichnet? Auf dem Formular? Dann musst Du es mal mit "Repaint" versuchen, um das Formular neu zu zeichnen.


mfg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

Re: Alternative zu Sleep

  Alt 29. Jan 2007, 22:14
Zitat von ManuMF:
Delay revisitedDelay revisited ist meine Empfehlung, weiß aber nicht, ob das speziell auch bei Threads so gut funktioniert.
Würde aber doch im grunde das gleiche sein..
Müßte dann an den stellen wo Sleep steht die Delay Funktion aufrufen.

Eigentlich sollte doch bei einen klickevent dieses erst abgearbeitet werden
bevor die neue ausgeführt wird.

Warum hat Delphi(Ich) da solche Probleme mit.

gruß
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#5

Re: Alternative zu Sleep

  Alt 29. Jan 2007, 22:22
Zitat von Michael Habbe:
Hi.

Wenn Du ein Sleep in der Hauptanwendung aufrufst, bleibt dann nicht die ganze Anwendung incl. Threads für diese Zeit stehen?
Schon mal daran gedacht, eine Variable zu benutzen, die vom Thread geändert wird, wenn dieser sich terminiert? Und dann vielleicht in dieser Form prüfen:
while ThreadNotTerminated do Application.ProcessMessages Wo werden denn die Bitmaps gezeichnet? Auf dem Formular? Dann musst Du es mal mit "Repaint" versuchen, um das Formular neu zu zeichnen.


mfg
In einem neuen Formular welche aus frmMain aufgerufen wird.

Sieht so aus das wenn andere Anwendungen laufen es vorkommen kann das die Bitmaps nicht mehr zeichnen
abhängig von der CPU auslastung.
Kann aber doch nicht mit Sleep experimentieren das sieht ja dann bei schnelleren Prozessoren wieder
anders aus.

Hänge mal den Quelltext an.

gruß
Miniaturansicht angehängter Grafiken
genbitmap_632.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Alternative zu Sleep

  Alt 29. Jan 2007, 22:48
Lass deinen Thread doch ein Ereignis auslösen, wenn er fertig ist. Oder wenn du nicht mit dem VCL Thread-Objekt arbeitest, lass dir eine Nachricht schicken, auf die du reagierst.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#7

Re: Alternative zu Sleep

  Alt 29. Jan 2007, 23:05
Zitat von Luckie:
Lass deinen Thread doch ein Ereignis auslösen, wenn er fertig ist. Oder wenn du nicht mit dem VCL Thread-Objekt arbeitest, lass dir eine Nachricht schicken, auf die du reagierst.
habe ich schon versucht
Leider ohne erfolg

irgendwas stimmt da nicht kann trotz debugen den Fehler nicht erkennen
das es mal geht und dann wieder nicht.
Kommt auch keine Fehlermeldung.

gruß
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#8

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 02:11
Hallo Emil!

Kann das sein, das Dich Delphi mit dem Handlegewechsle nervt?
Nach Deiner Beschreibung sind mir die Symptome bekannt, das die Bitmaps in Threads "verschwinden" weil sich die Handles ändern.

Ich nehme in Thrads immer die API funktionen um mir ein Bitmaps zu erstellt und damit herum zu spielen, da nervt mich Delphi dann net.

Muß net Dein Problem sein, wollt nur drauf hinweisen.

Grüßle!
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#9

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 11:21
Zitat von Sunlight7:
Hallo Emil!

Kann das sein, das Dich Delphi mit dem Handlegewechsle nervt?
Nach Deiner Beschreibung sind mir die Symptome bekannt, das die Bitmaps in Threads "verschwinden" weil sich die Handles ändern.

Ich nehme in Thrads immer die API funktionen um mir ein Bitmaps zu erstellt und damit herum zu spielen, da nervt mich Delphi dann net.

Muß net Dein Problem sein, wollt nur drauf hinweisen.

Grüßle!
Dürfte eigentlich nicht anders sein wie bei deinen Spiel was du geschrieben hast.
Ich benutzt die API BitBlt um teilbereiche aus einem Bitmap in ein Image zu kopieren.

Das funktioniert ja auch alles wenn das Projekt Gen Delphi alleine ausgeführt wird.
Aber in verbindung mit BassVis und den start aus einer anderen Form heraus macht es probleme.
Da ist die Frage liegt es nun an den Threads an der reihenfolge wie die Form gestartet wird
oder an was sonst.

gruß
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

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

Re: Alternative zu Sleep

  Alt 30. Jan 2007, 11:58
Ich hätte jetzt mal spontan auf waitforsingleobject getippt
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 23:49 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