Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Progress Bar während einer sleep funktion? (https://www.delphipraxis.net/44621-progress-bar-waehrend-einer-sleep-funktion.html)

Paul Bademeister 21. Apr 2005 18:42


Progress Bar während einer sleep funktion?
 
hallo zusammen...

ich habe folgendes Problem. ich steuere über den PC ne Relaiskarte an, um damit Alkohol-Pumpen zu aktivieren. Die Aktivierungszeit der Pumpen hab ich mit "sleep(xx)" festgelegt. Nun möchte ich gerne das während des Pumpvorganges ein Progressbar den Pumpstatus, bzw den füllstatus des Glases anzeigt. Hier mal ein kleiner ausschnitt aus dem Prog..


Portout(888,01); // pumpe wird aktiviert
sleep(2000); // pumpe läuft 2 sekunden
portout(888,0); // pumpe wird ausgeschaltet.

das ganze wird über nen Button aktiviert..
kann man da nen Progress bar einbauen ohne auf die sleep funktion zu verzichten??
und wie muss ich das bewerkstelligen?

vielen dank schonmal in vorraus :)

BenjaminH 21. Apr 2005 18:44

Re: Progress Bar während einer sleep funktion?
 
Zitat:

Zitat von Paul Bademeister
Portout(888,01); // pumpe wird aktiviert
sleep(2000); // pumpe läuft 2 sekunden
portout(888,0); // pumpe wird ausgeschaltet.

ersetz das sleep durch die Delay funktion, die irgendwo hier im Forum rumschwirrt.

SirThornberry 21. Apr 2005 18:48

Re: Progress Bar während einer sleep funktion?
 
nimm anstelle von Sleep einfach eine Schleife
Delphi-Quellcode:
var LTime, LTime2: Cardinal;
begin
  ProgressBar1.Max := 2000;
  LTime := GetTickCount + 2000;
  Portout(888,01); // pumpe wird aktiviert
  repeat
    Sleep(30); //damit die schleife nicht zu oft durchläuft
    LTime2 := GetTickCount;
    ProgressBar1.Position := 2000 - (LTime - LTime2);
  until LTime2 >= LTime;
  portout(888,0); // pumpe wird ausgeschaltet.
ist ungetestet

DP-Maintenance 21. Apr 2005 21:00

DP-Maintenance
 
Dieses Thema wurde von "Daniel" von "Fragen / Anregungen zur DP" nach "VCL-Komponenten und Controls" verschoben.

Paul Bademeister 22. Apr 2005 14:20

Re: Progress Bar während einer sleep funktion?
 
das mit der schleife hört sich gut an.
ich werde das mal am wochenende testen und dann hoffentlich mit einer erfolgsmeldug zurückkehren :)

mfg der Bademeister

Robert Marquardt 22. Apr 2005 14:28

Re: Progress Bar während einer sleep funktion?
 
Das ist aber gefaehrlich, da die Zeiten sich nicht aufsummieren.
Sleep bedeutet das Windows einen anderen Prozess abarbeitet und nicht vor der angegebenen Zeit zurueckkommt.
Es kann natuerlich auch etwas laenger dauern.

Ich wuerde hier mit mehreren Timern arbeiten. Indem man im Timerereignis den Timer abstellt, bekommt man einen Oneshot Timer.
Also Pumpe fuer x ms an bedeutet das man die Pumpe oeffnet und den Timer aktiviert, der nach x ms die Pumpe abstellt und sich selbst deaktiviert.
Ein weiterer Timer treibt den Progressbar an.

ste_ett 22. Apr 2005 14:32

Re: Progress Bar während einer sleep funktion?
 
Zitat:

Zitat von SirThornberry
nimm anstelle von Sleep einfach eine Schleife
Delphi-Quellcode:
var LTime, LTime2: Cardinal;
begin
  ProgressBar1.Max := 2000;
  LTime := GetTickCount + 2000;
  Portout(888,01); // pumpe wird aktiviert
  repeat
    Sleep(30); //damit die schleife nicht zu oft durchläuft
    LTime2 := GetTickCount;
    ProgressBar1.Position := 2000 - (LTime - LTime2);
    Application.ProcessMessages;   //  Refresh
  until LTime2 >= LTime;
  portout(888,0); // pumpe wird ausgeschaltet.
ist ungetestet


Zur Aktualisierung während des Vorgangs. :)
Sonst hängt die Form.

Robert Marquardt 22. Apr 2005 18:26

Re: Progress Bar während einer sleep funktion?
 
Sorry, das ist und bleibt ungenau. Um so schlimmer wenn die Messages verarbeitet werden.
Die Abarbeitung der aufgelaufenen Messages kann toedlich fuer die Genauigkeit sein.

SirThornberry 23. Apr 2005 08:24

Re: Progress Bar während einer sleep funktion?
 
wenn es um genauigkeit geht sollte man das ganze in einen Thread auslagern (das pumpe starten/stoppen) und nur die Progressbar in der Hauptanwendung laufen lassen.

Paul Bademeister 24. Apr 2005 10:03

Re: Progress Bar während einer sleep funktion?
 
Hab das mal mit der Schleife getestet. Funktioniert wunderbar :)
danke erstmal dafür!

nun muss ich nur noch ca. 70 sleep befehle durch die schleifen ersetzten.... *nerv*
ich hoffe meine nerven halten es aus.... durch die umstellung hab ich quasi ein komplet neues programm.

THX nochmal an alle!!!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 Uhr.
Seite 1 von 2  1 2      

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