Javítsa ki a késleltetés a Delphi

Javítsa ki a késleltetés a Delphi

Segíts kérlek!
Az én program Delphi tette a késleltetési ideje SLEEP () operandus.
Win98 alatt, ha a számítógép ki van kapcsolva a késleltetés alatt (például a felhasználó nem távolítja el a programot a memóriából) felugrik egy üzenet, amely szerint a program lógott, és nem reagál - talán vár felhasználó választ, stb
Hogyan kerülhetem ezt az üzenetet, azaz hogy a program kikerül memória zavaró Windows üzenetre

Nem használhatja a Sleep ().
helyébe GetTickCount és ciklus Application.ProcessMessages.
bár nem vagyok biztos benne, hogy ebben az esetben a káromkodás rendszert.

Wicked, és nem lehet egy kicsit? Kérlek!

felhasználások
Forms, SysUtils;
.
// aDelay - késleltetés ezredmásodpercben
eljárás Delay (aDelay: integer);
const
cMilliSec = 1/24/60/60/1000;
var
Kezdés ideje: kettős;
kezdődik
Kezdés ideje: = Most ();
míg a ((BegTime + aDelay * cMilliSec) Application.ProcessMessages ();
végén;

Magyarázd valaki - Mi BegTime.

eljárás Delay (const Delay: Cardinal);
var
STT: Cardinal;
kezdődik
STT: = GetTickCount;
ismétlés
Application.ProcessMessages;
amíg (GetTickCount - STT)> = késleltetés;
végén;
// Delay - késleltetés ezredmásodpercben

Sajnos ehelyett BegTime levelet Kezdés ideje - téves%)

Használja a hurok a függvény belsejében késéssel, ahol a szakasz box várja a megszakításokat, ha szükséges:
Csepp például nem állítja, hogy pontosságának számlálási időszak, de megfelelő példaként.

Egy egyszerű példa:
(Ha rákattint a gombra, 1 kezdet vár, ha rákattint a gombra 2 -preryvaetsya.

eljárás MySleep (const aMSec: integer; var aFlagBreak: logikai érték);
var
Interval: integer;
kezdődik
Interval: = aMSec;
míg Interval> 0 do
kezdődik
ha aFlagBreak majd a Kilépés;
alvás (100);
Dec (Interval, 100);
Application.ProcessMessages;
végén;
végén;

eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
fl: = false;
MySleep (10000, FL);
Edit1.Text: = „A várakozásnak vége”;
végén;

eljárás TForm1.Button2Click (Sender: TObject);
kezdődik
fl: = true;
végén;

Súgó.
Tisztán kedvéért progby tett prog - tettem egy nagy késéssel, de ez nem működik :-(
.
eljárás Delay (aDelay: integer);
const
cMilliSec = 1/24/60/60/1000;
var
Kezdés ideje: kettős;
kezdődik
Kezdés ideje: = Most ();
míg a ((kezdési + aDelay * cMilliSec) Application.ProcessMessages ();
végén;
eljárás TForm1.Button1Click (Sender: TObject);
kezdődik
késleltetés (1000000000);
Label1.Caption: = "késleltetés";
végén;
.

De a tény az, hogy nem. Azaz egyáltalán nem Képaláírás azonnal megváltozik, késedelem nélkül!

Mert míg ((kezdési + aDelay * cMilliSec) több most

Ponyalya Minden működik! Köszönjük Anatolij Podgoretsky és Stratos.

Továbbra is csak a megtekintéséhez alatt Win98.

IMHO, ha beszélünk az illetékes késedelem, akkor beszélni kell MsgWaitForMultipleObjects. És a processzor nincs betöltve, és nem lassítja a üzenetek feldolgozása.