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

Odpowiedz Nowy wątek
2019-09-04 17:09
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 .

edytowany 4x, ostatnio: furious programming, 2019-09-05 19:53

Pozostało 580 znaków

2019-09-04 17:27
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:

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

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


edytowany 2x, ostatnio: furious programming, 2019-09-04 17:28

Pozostało 580 znaków

2019-09-04 17:47
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.

Pozostało 580 znaków

2019-09-04 17:56
0

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


Pozostało 580 znaków

2019-09-04 18:07
0

oto kod źródłowy.

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.
edytowany 1x, ostatnio: Ktos, 2019-09-04 18:20
Na przyszłość: tak krótkie fragmenty kodu spokojnie możesz umieszczać w postach, nikomu się nie chce pobierać plików zazwyczaj. - Ktos 2019-09-04 18:20
Calling conventions...: procedure Sleep(dwMilliseconds: DWORD);stdcall; external 'kernel32' name 'Sleep'; - Anoxic 2019-09-06 15:16

Pozostało 580 znaków

2019-09-04 22:18

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:

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.


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0