Jak używać Sleep bez dołączania modułu Crt?

Jak używać Sleep bez dołączania modułu Crt?
L1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

Witam,pytanie tak jak w temacie,gdyż przeszukałem niemalże cały internet - a z racji tego że mam mało czasu,to nie potrafię znaleźć przykładu używania funkcji sleep.
Jestem zupełnie zielony w FreePascal,ale znam dość dobrze podstawy c++,więc jak ktoś poda jakiś trudniejszy przykład to i tak byłbym wdzięczny.Pozdrawiam.
Btw: Pytam o użytek funkcji sleep bez using crt,ponieważ dla delay - mój program już nie chciał działać jak go odpalałem z rozszerzenia .pas .

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
2

Przecież procedura Sleep nie znajduje się w module Crt (w niej jest procedura Delay), więc w czym problem? Dodaj moduł Windows do uses i używaj, albo zaimportuj ją samemu:

Kopiuj
procedure Sleep(dwMilliseconds: DWORD); external 'kernel32' name 'Sleep';

i w ogóle nie będziesz musiał dodawać żadnego modułu. ;)

L1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

Dziękuję,działa. Ale niestety po użyciu jej raz-to program zastyga po napisaniu jednej literki ( mój program ma ogólnie drukować napis po x milisekundach ) .

Jednakże,gdy użyję uses sysutils,to napis drukuje się tak jak powinien.

tak czy inaczej problem na rozwiązanie znalazłem,ale ciekawi mnie to - że przy użyciu procedury nie ma takiego samego efektu co uses sysutils,może się czepiam,ale wg. mnie powinno działać tak samo.
Ale z racji tego że problem na rozwiązanie znalazłem,to dziękuję raz jeszcze.

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
0

Bez zobaczenia kodu źródłowego niczego nie jestem w stanie doradzić.

L1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6
0

oto kod źródłowy.

Kopiuj
program druk;

procedure Sleep(dwMilliseconds: DWORD); external 'kernel32' name 'Sleep';

var

napis: string;
i: integer;

begin

napis:='Hello World';
for i:=1 to length(napis) do
begin
        write(napis[i]);
        Sleep(100);
end;

readln;
end.

flowCRANE
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Tuchów
  • Postów: 12269
1

Dość dziwnie to wygląda – u mnie tak samo nie działa jak należy. Pewnie oprócz importu trzeba by zrobić coś jeszcze, ale raczej nie problem dodać do uses modułu Windows i skorzystać już z gotowego importu:

Kopiuj
program Druk;
uses
  Windows;
var
  Napis: String;
  I: Integer;
begin
  Napis:='Hello World';

  for I := 1 to Length(Napis) do
  begin
    Write(Napis[I]);
    Sleep(100);
  end;

  ReadLn();
end.

Taki kod działa prawidłowo.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.