Q&A

  • Delay 프로시져 중지하는 방법좀.....
아래는 이정욱님이 올린 delay 프로시져입니다.
유용하게 사용중인데, Delay도중에 delay프로시져를 강제로
종료시키는 방법은 어떻게 하나요.. 뭐냐하면
delay(10000)이라주면 10초동안 프로세스가 쉬게되는데
약 5초 경과후에 강제로 delay를 종료하고 프로세스를
진행시키고 싶을때가 있을겁니다.
프로그램화면상에 button을 하나 만들어두고 클릭하면 delay가 종료되도록
하고 싶은데요.....





아래 --- 이정욱님의 Delay 프로시져..

Sleep프로시져를 사용하면 그 프로그램의 프로세스 자체가 다 멈춰진 상태에서 기다리게 된다. 그렇다면 정말 시간을 끌기위해서 잠깐동안 지체하는것 외에는 사용하지 못한다.
예를들어 무슨작업을 시키고 그 작업이 진행되는동안 한 3초간을 쉬고 싶다라고 할때는 Sleep을 사용하지 못한다.
그럴때는 아래의 delay프로시져를 사용하자. 훨씬 편할것이다.
delay(3000)을 주면 3초정도 쉰다.

procedure delay(TickTime : Integer);
var
Past,Now: Integer;
begin
Past := GetTickCount;
repeat
Now := GetTickCount;
Application.ProcessMessages;
Until Now > Past + TickTime;
end;

2  COMMENTS
  • Profile
    KDDG_RNStone 2003.03.27 20:59
    걍 Boolean 변수 하나 설정해서 기본적으로 False 주고 버튼 클릭했을 시에 True 주면 되지 않을까여?

    Repeat 구문에

    If  IsStop  Then
    begin
      IsStop := False;
      Break;
    end;

     뭐 이런 식으로여

    즐프하세요~



  • Profile
    박영목 2003.03.28 00:31
    KDDG_RNStone 님 말씀 정확합니다.!!!

    저도 답변 해 드릴려고 열심히 밥상을 차렸는데....

    그런데 들어오니 올라와 있네요....  ㅋㅋㅋㅋ


    소스 Projecter 화일도 같이 올립니다(아직 델파이 실력이 뭐해서 죄송... ㅎㅎㅎ),  처음 하시는 분 꼭 참고 하세요.....

    그리고 중간에 Sleep()을 사용해서 차이점도 보시면 좋겠네요....

    아! 그리고 VC할 적에 Sleep함수가 문제가 있다고 하더군요...
    시간을 좀 길게 잡으면 Down되는 현상이 있다고..... 주의하시고... 참고하세
    요...

    <2003.06.13일 추가> Sleep이 문제가 있다고 했는데... 오늘 Sleep도 안 사용했는데... 계속 다운이 일어났다. 함수 안에서 루프를 많이 돌리고 있고 UDP로 DATA를 받게 해 두었는데 송신측에서 DATA 마구 보내니까? 다운 일어나네요.  무조건 시간을 끄는 곳에는 Application.ProcessMessage를 하셔야 안전할 것 같습니다. 헤헤헤헤...

    요런 Error는 한번씩 나겠지요... 저도 별로 사용할 일이 없어서 모르겠네요... ㅋㅋㅋㅋㅋ  

    애고 일해야지...  일이 조금 지겹네요.... Delphi가 쉬워서 좋지만.... ㅋㅋㅋㅋ
    절대 Delphi 무시하는 것 아님.....


    procedure OnDelay( Application: TApplication; TickTime : Integer );
    var
      Past,Now: Integer;
    begin

      iOnDelay := 1;

      //............................................................................

      Past := GetTickCount + TickTime;

      repeat
        Now := GetTickCount;

        Application.ProcessMessages;

      Until Now > (Past*iOnDelay);  // + TickTime;

      //............................................................................

      iOnDelay:=0;

    end;

    procedure OffDelay();
    begin
      iOnDelay:=0;
    end;

        ............. 부산 센텀벤처타운 ISCommunications 프로그래머 박영목 ........