![]() |
Alternative zu Sleep
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:
Ohne die Sleeps rennt das teil weiter das nächste Plugin wird initialisiert bevor das vorherige Plugin beendet wurde
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; das kann es irgendwo nicht sein. Bei bedarf sende ich nochmal den Source. gruß |
Re: Alternative zu Sleep
![]() |
Re: Alternative zu Sleep
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:
Delphi-Quellcode:
Wo werden denn die Bitmaps gezeichnet? Auf dem Formular? Dann musst Du es mal mit "Repaint" versuchen, um das Formular neu zu zeichnen.
while ThreadNotTerminated do Application.ProcessMessages
mfg |
Re: Alternative zu Sleep
Zitat:
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ß |
Re: Alternative zu Sleep
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
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ß |
Re: Alternative zu Sleep
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.
|
Re: Alternative zu Sleep
Zitat:
Leider ohne erfolg :wall: irgendwas stimmt da nicht kann trotz debugen den Fehler nicht erkennen das es mal geht und dann wieder nicht. Kommt auch keine Fehlermeldung. gruß |
Re: Alternative zu Sleep
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! |
Re: Alternative zu Sleep
Zitat:
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ß |
Re: Alternative zu Sleep
Ich hätte jetzt mal spontan auf waitforsingleobject getippt
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz