Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi procedure waten lassen (https://www.delphipraxis.net/13417-procedure-waten-lassen.html)

Pseudemys Nelsoni 18. Dez 2003 00:21


procedure waten lassen
 
hoi

wie kann ich eine prozedur warten lassen? ich möcht nicht "sleep" verwenden.
sagern wir mal meine proceduren sehen so aus:


Delphi-Quellcode:
procedure proc2;
begin
  //hier irgendetwas tuen bis 5sek um sind
end;

procedure proc1;
begin
  proc2;
  // hier gehts nach 5 sek weiter
end;
hat jemand ne idee?

Christian Seehase 18. Dez 2003 00:31

Re: procedure waten lassen
 
Moin Pseudemys Nelsoni,

schau doch mal in der Code Library nach Delay.

Pseudemys Nelsoni 18. Dez 2003 11:15

Re: procedure waten lassen
 
hallo christian, danke, das beispiel von lueckie hilft mir sehr, so hatte ich das ca auch vor, habs nur mit ner while schleife versucht

neolithos 18. Dez 2003 16:46

Re: procedure waten lassen
 
"Die armen Anwender"

Was ist an Sleep so schlecht?

Christian Seehase 18. Dez 2003 16:50

Re: procedure waten lassen
 
Moin Neolithos,

Zitat:

Zitat von Neolithos
Was ist an Sleep so schlecht?

Das es für die angegebene Zeit den Thread in dem es aufgerufen wird komplett anhält. Es werden keinerlei Messages mehr verarbeitet.
Wendet man also Sleep im Hauptprogramm an, wirkt es so, als hätte sich das Programm aufgehängt.

MrKnogge 18. Dez 2003 16:58

Re: procedure waten lassen
 
Delphi-Quellcode:
procedure Wait(time: word);
var Start: Integer;
begin
  Start:=GetTickCount;
  while GetTickCount-Start <= time do
    application.ProcessMessages;
end;

neolithos 18. Dez 2003 17:08

Re: procedure waten lassen
 
Stand aber nicht in der Frage!

Desweiteren ist das schlecht für die anderen Prozesse im System...

Ich würde die ganze Sache so formulieren...

Delphi-Quellcode:
procedure Wait(time: word);
var Start: Integer;
begin
  Start:=GetTickCount;
  while GetTickCount-Start <= time do
    begin
      application.ProcessMessages;
      Sleep(0); // Terminiere Zeitscheibe bzw. Sleep(1); um Prozessor zu entlasten
    end;
end;
..., wenn es nicht exakt sein soll!


Ganz ideal wäre ein System-Timer via MsgWaitForMultipleObjects (was hunderstel genau funktioniert).
Falls interesse besteht -> muss ich mir den Code noch ausdenken

Pseudemys Nelsoni 19. Dez 2003 01:22

Re: procedure waten lassen
 
hallo,

ich habe lueckie's beispiel benutzt:

Delphi-Quellcode:
procedure delay(msec:longint);
var
  start,stop:longint;
begin
  start := gettickcount;
  repeat
  stop := gettickcount;
  application.processmessages;
  until (stop - start ) >= msec;
end;
jetzt gibts ein problem und zwar sorgt das "appliaction.processmessages dafür das andere sachen verarbeitet werden können...ein beispiel ist dieses hier:

Zitat:

[19:12:03] (02:13:08) <silent> !quiz start
[19:12:03] (02:13:10) <ism> ¤¤¤ Lade Fragen...
[19:12:03] (02:13:10) <ism> ¤¤¤ Fertig! - 4 Fragen geladen
[19:12:03] (02:13:10) <ism> ¤¤¤ Quiz beginnt
[19:12:03] (02:13:14) <ism> ¤¤¤ i?
[19:12:03] (02:13:37) <asdf> ...
[19:12:03] (02:13:46) <silent> muss was testen..
[19:12:03] (02:13:57) <asdf> !team satan
[19:12:03] (02:14:16) <ism> ¤¤¤ Zeit abgelaufen. Die richtige antwort wäre "s" gewesen
[19:12:03] (02:14:16) <silent> s
[19:12:03] (02:14:19) <ism> ¤¤¤ silent hat die Frage "i?" richtig, mit "s" beantwortet
[19:12:03] (02:14:19) <ism> ¤¤¤ silent hat jetzt 1 richtige Antwort(en)

wenn die frage aufgelöst wird tritt die pause ein, die 5 sekunden dauert bis zur nächsten frage. Wenn ich während diesen 5 sekunden das ergebnis (das ja schon aufgelöst wurde) eingebe, krieg ich es als richtige antwort angezeigt....

wie kann ich das nun angehen? mein prog soll die anderen prozeduren währen der pause nicht weiter verarbeiten...dennoch soll es aber ach nicht "abstürzen"...was kann man da machen?

btw: die procedure die die antworten prüft ist eine andere als die, in der die pause aufgerufen wird, diese sollte nicht verarbeitet werden

neolithos 19. Dez 2003 10:48

Re: procedure waten lassen
 
Disable die Frage doch!

ctrl.Enabled := false

Robert Marquardt 19. Dez 2003 11:43

Re: procedure waten lassen
 
JaJa Prozeduren koennen nicht schwimmen. Fuehr sie also nicht in zu tiefes Wasser ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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