Avatar billede valagar Nybegynder
14. august 2001 - 16:30 Der er 8 kommentarer og
2 løsninger

fryse systemet

hvordan kan jeg i Delphi be programmet om å vente en stund før den fortsetter? I Pascal het dette delay(x) men det ser ikke ut til å virke.

Jeg bruker Delphi 4
Avatar billede pellelil Nybegynder
14. august 2001 - 16:34 #1
Sleep(x) hvor X er det antal millisekunder du vil vente
Avatar billede speedy Nybegynder
14. august 2001 - 18:04 #2
Sleep(X) Venter, men låser samtidigt programmet,

denne delay procedure låser ikke programmet:

procedure delay(x: Integer);
var
  tmpTick: Integer;
begin
  tmpTick := GetTickCount;
  repeat
    Application.ProcessMessages
  until GetTickCount - tmpTick >= X;
end;
Avatar billede pellelil Nybegynder
14. august 2001 - 19:12 #3
speedy> \"Sleep\" fortæller styresystemet at at den pågældende TRÅD \"skal sove\" i den den ønskede tid. Dette bevirker sålede at denne tråd ikke vil \"handle\" evt. events. Med andre ord hvis det er \"hoved tråden\" (selve programmet) der \"sover\" så vil det ikke reagere på at brugeren klikker på en knap. Hvis der i programmet er flere tråde så vil dissse fortsætte uændret.

En MEGET vigtig ting er belastning af CPU\'en. Når du bruger Sleep så er der ikke noget performace tab (tværdigmod) da CPUen er frigivet til alle andre programmer/processer der køre på denne. Din Delay-procedure derimod vil køre CPUen i knæ da den \"stæler\" alt den processer-kraft den kan komme i nærheden af.
Avatar billede speedy Nybegynder
14. august 2001 - 20:32 #4
Jeg kan da ikke mærke forskel på min CPU\'s performance når jeg bruger min delay ?

Jeg har den kørende i et program, som sender data ud på parallelporten hele tiden, men som sagt ændrer det ikke på hverken hastighed eller noget ?

/SpEeDy
Avatar billede pellelil Nybegynder
14. august 2001 - 20:38 #5
Hvilket OS kører du? Hvis du køre NT/W2K prøv så at hive Task-manageren frem. Hvis du blot sætter prioriteten lav nok så vil det ikke betyde \"så meget\" da dit program blot vil ligge sig i baggrunden hvis andre (vigtiger) opgaver skal til fadet.

\"Det rigtige\" ville (hvis du spørger mig) være at lave en tråd der håndtere din kommunikation. Man sålænge du ikke ser det som et problem (if it ain\'t broken don\'t fix it).
Avatar billede speedy Nybegynder
14. august 2001 - 20:40 #6
Jeg kører winME.

Men tak for tippet ;)

/SpEeDy
Avatar billede zerohero Nybegynder
14. august 2001 - 23:59 #7
Der er også SleepEx() tilgængeligt i Delphi.
Men hvad forskellen mellem Sleep() og SleepEx det ved jeg ikke - Det ved Pelleli sikkert!!! :-))

ZeroHero
Avatar billede pellelil Nybegynder
15. august 2001 - 08:12 #8
ZeroHero> Takker for tilliden  :-)
Mange af ?????Ex kommanndoerne er \"bare\" nyere/\"bedre\" udgaver af de samme kommandoer, som ofte giver dig mulighed for at angive flere parametre og dermed mere funktionallitet.

Hvis du i din Delphi går i flg. menu: Help->WindowsSDK så kan du søge på hjælpen til diverse windows 32API kald og her kan du finde en beskrivelse på hvordan \"SleepEx\" bruges. Jeg har ikke selv brugt denne, men i følge hjælpen så har du yderligeere et parameter der angiver hvorvidt dit program skal være \"Alertable\":

<SNIP>
bAlertable
Specifies whether the function may terminate early due to an I/O completion callback function or an APC. If bAlertable is FALSE, the function does not return until the time-out period has elapsed. If an I/O completion callback occurs, the function does not return and the I/O completion function is not executed. If an APC is queued to the thread, the function does not return and the APC function is not executed.
If bAlertable is TRUE and the thread that called this function is the same thread that called the extended I/O function (ReadFileEx or WriteFileEx), the function returns when either the time-out period has elapsed or when an I/O completion callback function occurs. If an I/O completion callback occurs, the I/O completion function is called. If an APC is queued to the thread (QueueUserAPC), the function returns when either the timer-out period has elapsed or when the APC function is called.
</SNIP>

Speedy> Det kunne da være \"sjovt at se\" hvordan dit program opfører sig hvis du i stedet for dit loop prøver med SleepEx hvor du sætte Alerable til True !? Do share your knowledge !!
Avatar billede speedy Nybegynder
15. august 2001 - 17:23 #9
pellelil>>Det prøvede jeg så lige, men uden succes ;) SleepEx med alertable til true fik stadig mit program til at gå HELT i stå :(

/SpEeDy
Avatar billede zerohero Nybegynder
16. august 2001 - 19:46 #10
Hvad fanden jeg finder mig sku ikke i at være den eneste der bliver afvist i et spm...*GG*
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester