Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pause in procedure einbauen...? (https://www.delphipraxis.net/81315-pause-procedure-einbauen.html)

Mucki 24. Nov 2006 17:49


Pause in procedure einbauen...?
 
Hallöchen. :)

Ich möchte Daten über die RS232 senden und empgangen. Allerdings
brauche ich zwischen senden & empfangen eine Pausenzeit von,
mindestens 40ms.

(Ich habs mit einem timer probiert, allerdings gabs Probleme,
als ich eine for-Schleife um die komplette senden/empfangen procedure
legen wollte.
Es geht wohl auch einer Funktion von AsyncPro welches ich hierzu
verwende (ApdComPort.SetTimerTrigger, ApdComPort.SetTimerTrigger),
komme aber nicht dahinter wie!)

Meine Frage:

Kann mir jemand sagen wie ich eine Pausenzeit zwischen senden und empfangen,
also in mitten einer procedure einfügen kann? :gruebel:


Gruß Mucki

Balu der Bär 24. Nov 2006 17:50

Re: Pause in procedure einbauen...?
 
Hier im Forum suchenDelay vielleicht? :gruebel:

Martin K 24. Nov 2006 17:52

Re: Pause in procedure einbauen...?
 
Wenn's nur um 40 ms geht, sollte Delphi-Referenz durchsuchenSleep() wohl reichen.

Balu der Bär 24. Nov 2006 17:54

Re: Pause in procedure einbauen...?
 
Zitat:

Zitat von Martin K
Wenn's nur um 40 ms geht, sollte Delphi-Referenz durchsuchenSleep() wohl reichen.

Wobei mit Sleep die ganze Anwendung einfriert, was in den meisten Fällen nicht von Vorteil ist wenn noch andere Sachen in der Zwischenzeit abgearbeitet werden sollen.

Mucki 24. Nov 2006 17:55

Re: Pause in procedure einbauen...?
 
Mit sleep() hab ich es probiert, dann geht nichts mehr...

Martin K 24. Nov 2006 17:58

Re: Pause in procedure einbauen...?
 
Zitat:

Zitat von Balu der Bär
Zitat:

Zitat von Martin K
Wenn's nur um 40 ms geht, sollte Delphi-Referenz durchsuchenSleep() wohl reichen.

Wobei mit Sleep die ganze Anwendung einfriert, was in den meisten Fällen nicht von Vorteil ist wenn noch andere Sachen in der Zwischenzeit abgearbeitet werden sollen.

Das ist mir auch klar, aber bei 40 ms ....
Außerdem denke ich, dass der Threadersteller wohl kaum Lust dazu hat, sich durch fast 300 Suchergebnisse durchzuklicken :wink:

Okay, damit kann man wohl eher was anfangen:
DelayDelay

//Edit:
Kein roter Kasten heute?

Balu der Bär 24. Nov 2006 17:59

Re: Pause in procedure einbauen...?
 
Moin Mucki,

um deine Frage aus der PN mal hier zu beantworten, damit alle etwas davon haben:
Zitat:

In der OH findet man nichts über delay.... Warum?
Weil Delay keine Standard-Delphi-Funktion ist sondern irgendwann einmal von irgendwem geschrieben wurde. Hättest du die DP-Forensuche bemüht, hättest du folgendes gefunden (einfach in den Quelltext kopieren und von deiner Prozedur aus aufrufen):
Delphi-Quellcode:
procedure Delay(Milliseconds: Integer);
var
 Tick: DWord;
 Event: THandle;
begin
 Event := CreateEvent(nil, False, False, nil);
 try
  Tick := GetTickCount + DWord(Milliseconds);
  while (Milliseconds > 0) and
   (MsgWaitForMultipleObjects(1, Event, False, Milliseconds, QS_ALLINPUT) <> WAIT_TIMEOUT) do
    begin
      Application.ProcessMessages;
      if Application.Terminated then Exit;
      Milliseconds := Tick - GetTickcount;
    end;
 finally
  CloseHandle(Event);
 end;
end;

Mucki 24. Nov 2006 18:10

Re: Pause in procedure einbauen...?
 
:-D O.K. hab ein kleinen Test gemach... hat funktioniert. :-D

Jetzt bau ich es mal in das Programm ein,

danke für den Tip. :thumb:

Melde mich hier noch einmal...

SubData 24. Nov 2006 18:25

Re: Pause in procedure einbauen...?
 
if Application.Terminated then Exit; // Wäre ein Break hier nicht viel sinnvoller?

Mucki 24. Nov 2006 18:39

Re: Pause in procedure einbauen...?
 
Kann keine Schleife um das delay legen, so das z.B. das senden & empfangen
mehrmals durchlaufen wird.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i    : integer;
pause : word;
 begin
   for i := 1 to 5 do
   begin
   label1.caption := 'bitte warten';

   delay(500);

   label1.caption := 'pause vorbei';
   pause := i ;
   end;
 end;
Warum?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 Uhr.
Seite 1 von 2  1 2      

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