Results 1 to 11 of 11

Thread: Delay-functie

  1. #1

    Delay-functie

    Ik kom heel vaak vragen op dit forum tegen over een vertraging van een x-aantal seconden in je programma. Altijd wordt de oplossing aangedragen doormiddel van timers enzo.

    Een veel makkelijkere manier is de volgende:

    Code:
    procedure TFormStart.Delay(ms : longint);
    var
      TheTime : LongInt;
    begin
      TheTime := GetTickCount + ms;
      while GetTickCount < TheTime do
        Application.ProcessMessages;
    end;
    Simpelweg in je code: Delay(5000) en je programma zal 5 sec wachten met uitvoeren van code!!!

    Ook zeer efficient voor het volgende:

    Als je een vrij zware code hebt, en je wilt een verandering op je form hebben, wil deze niet altijd doorgevoerd worden voordat de zware code is afgehandeld. Je form 'hangt' als het ware even zolang je programma die zware code afhandelt.

    Zet na je formaanpassingen (zoals een label zichtbaar maken ofzo) een Delay(1) neer, en delphi past eerst je form aan, en gaat dan pas naar de zware code.

    En een vertraging van 1 milliseconde is nu niet echt schadelijk voor je programma!

    Succes ermee en ik hoop dat jullie er iets aan hebben!!

  2. #2

    Re: Delay-functie

    Originally posted by Tischnoetentoet

    Zet na je formaanpassingen (zoals een label zichtbaar maken ofzo) een Delay(1) neer, en delphi past eerst je form aan, en gaat dan pas naar de zware code.
    Kun je evengoed Application.processmessages schrijven, als het maar een fractie van een seconde is dat je prog moet "wachten"
    DeX 3 Delphi := The ease of VB with the power of C; Zoekt en gij zult vinden

  3. #3
    Als je wil dat een bepaalde handeling mindstens een bepaalde tijd duurt, dan kun je beginnen met de regel
    Code:
      TheTime := GetTickCount + ms;
    Daarna voer je je handelingen uit en daarna komt de rest van de code:
    Code:
      while GetTickCount < TheTime do
        Application.ProcessMessages;
    Op deze manier zal je programma meteen doorgaan als de bewerking langer duurt dan het opgegeven delay. Wanneer het korter duurt, dan zal niet het hele delay worden gewacht, maar alleen nog de resterende tijd.
    Dit is helaas niet te doen met de delay functie.
    1+1=b

  4. #4
    De grote vraag is natuurlijk: waarom zou je een delay in je programma willen bouwen?

  5. #5
    Konijnus Digitalus Bobo's Avatar
    Join Date
    Jul 2003
    Location
    Pernis
    Posts
    338
    Ik denk dat er iemand heel hard aan een splash-screen heeft gewerkt dat vervolgens na 5 milliseconden bleek te verdwijnen

  6. #6
    Nog 3 maanden student :)
    Join Date
    Oct 2003
    Location
    Sittard
    Posts
    491
    Er zijn wel een situaties dat je bijvoorbeeld 1 minuut ergens op moet wachten?

    deze delay zou dan een minuut lang 100% cpu usage slurpen....
    ik gebuik het volgende:
    Code:
    procedure LongDelay(DelayMs : Cardinal);
    var
      StopTime : Cardinal;
    begin
      StopTime := GetTickCount + DelayMs;
      while GetTickCount < StopTime do
      begin
        Application.ProcessMessages;
        Sleep(1);
      end;
    end;
    en als je hele lange delays hebt, maak je die sleep(1) een sleep(10) of iets in die trend.

    ik weet is een beetje oud topic, maar dacht, dit mag er best nog even over gezegd worden.

  7. #7
    Delphi 7 Enterprise
    Join Date
    Oct 2004
    Location
    Echt. Nederland; Uses: Delphi 7 Enterprise
    Posts
    379
    Denk er aan dat de value bij sleep in MilliSeconden is, Dus 1000 is 1 sec!

  8. #8
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    sleep(0) is ook legaal, en betekent "geef timeslice op".

    Zie
    http://msdn.microsoft.com/library/de...base/sleep.asp

  9. #9
    Yay: Student(je) af
    Join Date
    Jun 2003
    Location
    Harderwijk
    Posts
    2,621
    Quote Originally Posted by GolezTrol
    Op deze manier zal je programma meteen doorgaan als de bewerking langer duurt dan het opgegeven delay. Wanneer het korter duurt, dan zal niet het hele delay worden gewacht, maar alleen nog de resterende tijd.
    Dit is helaas niet te doen met de delay functie.
    Tenzij je natuurlijk de Delay als parameter ook een pointer naar een functie meegeeft
    My software never contains bugs. Perhaps just undocumented features.

  10. #10
    Dat kan, maar dat maak je het waarschijnlijk veel moeilijker dan het is. Je zal maar zelden zo'n situatie tegen komen, en method pointers mee gaan geven, is dan alleen maar verwarrend.

    Maar het kan wel ja
    1+1=b

  11. #11
    Nog 3 maanden student :)
    Join Date
    Oct 2003
    Location
    Sittard
    Posts
    491
    Quote Originally Posted by marcov
    sleep(0) is ook legaal, en betekent "geef timeslice op".

    Zie
    http://msdn.microsoft.com/library/de...base/sleep.asp
    enigste nadeel hiervan is dat als de cpu idd niks te doen heeft, hij wel 100% cpu vreet, alleen omdat het mogelijk is, terwijl met een sleep(1) de processor lekker idle blijft.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. Callback functie in thread (TimeSetEvent)
    By marz in forum Algemeen
    Replies: 8
    Last Post: 26-Jul-04, 16:36
  2. Replies: 2
    Last Post: 09-Oct-03, 11:03
  3. Functie in Threads
    By rachid in forum Algemeen
    Replies: 13
    Last Post: 01-Oct-03, 11:20
  4. objecten aanspreken in een functie
    By aEr_aEr in forum Algemeen
    Replies: 2
    Last Post: 21-Jan-03, 13:31

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •