Q&A

  • Delay 관련 질문입니다.
현재 메인 Timer 가 1초 마다 진행하는 일이 있습니다.
그리고 어떠한 일을 할때 Delay를 해야되는 경우가 발생을 하구요..
그래서 Delay 함수를 사용하는데. 이것이 메인 Timer에 영향을 주는군요.
만일 Delay를 3초를 주면 메인 Timer도 3초간 실행을 하지 안습니다.
그래서 Delay 함수를 Thread 로 분리하여 실행을 하는데도
메인 Timer에 영향을 줍니다.

제가 하고 싶은 것은 Delay를 사용하면서도 메인 Timer는 1초마다
진행하는 일을 하고 싶습니다.

질문이 너무 난해한가요..
고수님들의 한수 부탁드립니다...
5  COMMENTS
  • Profile
    김요한 2004.05.13 19:28
    LuckyBoy님께서 원하시는 일을 잘 이해를 못해서
    축구경기로 예를 들어 보겠습니다.

    경기는 전후반 45분,
    진행하는 중간에 선수들이 파울을 하면
    심판이 잠시 경기를 중단시키고 해당하는
    선수에게 퇴장이나 경고를 줍니다.
    그런 동안에도 경기 시간은 전혀 변화가 없지요.
    타이머는 계속 시간만 표시하겠지요.
    심판이 그만큼 지연된 시간을 나중에 반영을 하겠지만.

    즉,
    프로그램이 가동하는 동안 메인 타이머는
    다른 프로세스에 관계없이 계속 되어야 하고
    중간에 인터럽트를 주고 어떤 프로세스를
    일정시간 만큼 구동한다는 것이 아닌가요?

    그렇다면,
    Thread 외에는 답이 없을 듯 합니다.
    정확한 업무를 모르는 입장에서
    어디까지나 제가 알고 있는 지식안에서 입니다.
    그리고, 제 생각에는 이런  방식이 아닌 더 효율적인
    방식이 있을 듯 합니다.

    그럼,
    좋은 하루가 되시길 바랍니다.


  • Profile
    너구리 2004.05.13 00:42
    delay 함수가 뭔가요??

    결과를 보기엔 어플리케이션 전체가 3초동안 멈추는게 아닌가 싶은데요..

    그냥 이렇게 하면 안되나요?

    장기대국 보면 양측에 초시계를 놓고 상대방이 수를 두면

    반대 시계가 돌아가고 다시 이사람이 수를 두면 반대쪽 시계가 돌아가는

    timer1에는 원래 작업내용을 넣으시고..

    딜레이 할때 timer1.enable := False 하시고..

    timer2 에서 3초를 잰후에

    timer2.enable := False;
    timer1.enable := True;

    이렇게요..그리고 [질문]이라고 달아주세요~~~

  • Profile
    LuckyBoy 2004.05.13 01:29
    procedure TIoOperate.Delay(DelayTime: Integer);
    var
      sPast,sNow: Integer;
    begin
      sPast := GetTickCount;
      repeat
      sNow := GetTickCount;
      Sleep(1);
      Application.ProcessMessages;
      Until sNow > sPast + DelayTime;
    end;

    위의 것이 Delay 함수이구요..
    그렇게 간단한 거라면 왜 질문에 올렸겠어요..
    답변은 감사한데요.. 제가 원하는 답변이 아니랍니다.
    제가 설명을 드릴려고 3초 라고 했지만 사실은 300~500 ms 정도의 Delay Time을 사용하구요.. 한곳에서 사용하는 것이 아니고 여기 저기에서 사용을
    한다는 거에요..
    그런데 제가 원하는 것은 한곳에서 사용을 하더라도.. 3초를 사용할때도
    이러한 문제가 발생하니까.. 해결 방법이 없나 하는 겁니다..

  • Profile
    너구리 2004.05.13 02:27
    무지하게 슬립하는거군요...

    분리하고 싶은게 delay가 아니라 timer 아닌가요??

    자료실에 보면 이름이 잘 기억이 안나지만 다른 분이 만드신

    IdleTimer 인가가 있습니다.threadtimer인가 써보진 않았습니다만

    아마 소스를 분석해 보셔도 도움이 되실거구요..

    sleep쓰면 멈춤니다. 델파이 헬프에도 조심하라고 나와있군요..

  • Profile
    LuckyBoy 2004.05.13 04:44
    제 질문에 관심 및 답변에 감사드립니다.

    말씀하신대로 Sleep을 사용하면 Sleep동안은 멈추지요.
    하지만 어쩔수 없이 Sleep을 사용하게 되었습니다(제가 실력이 없어서요..)
    Sleep을 사용하는 이유는 이것을 사용하지 않으면
    CPU 점유율이 100%로 상승을 하기때문에 Sleep을 집어넣었습니다.

    그리고 ThreadTimer도 사용을 해봤거든요.. 그래도 결과는 마찬가지였습니다. 정확한 사용법을 몰라서 그런건지..

    아무튼 이것을 해결하고 싶은데.. 정말 어떻게 하면 좋을지 좋은방법이
    생각나지 않네요..
    그럼 즐프하세요..

    • 최용일
      2004.05.13 19:32
      안녕하세요. 최용일입니다. 델파이소스에 있는 InputBox함수에 한줄만 추가시켰습니다. function I...
    • 유정헌
    • 2004.05.13 08:50
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 유정헌
      2004.05.14 00:22
      정말 도움이많이되었습니다. 감사합니다.
    • 이진기
      2004.05.13 19:38
      procedure TForm1.Timer1Timer(Sender: TObject); var     NewTime: TTime; begi...
    • 석주현
      2004.05.13 19:03
      이런 방법도 있습니다.. 아래를 보면 아시겠지만 TTIme이 double 형이니깐 아래처럼 해서 그 시간들의 ...
    • 바보래요
      2004.05.13 17:41
      우선 타이머의 인터벌을 1000으로 하시구요  1000이 1초거든요... 그리고 버튼을 Enabled...
    • FREEFLY
    • 2004.05.13 07:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • cell
      2004.05.13 17:34
      원하는 답변은 아니겠지만... Tprinter을 이용해서 출력하세요. 아주 정확하게 위치가 맞출수 있습니다. ...
    • 박미영
    • 2004.05.13 06:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김철홍
      2004.05.13 17:48
      하나의 폼에 다른 폼의 유닛을 추가하세요. 두개의 폼 A, B가 있다고 할때 unitA의 implementation아래에...
    • 미러
    • 2004.05.13 05:54
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 너구리
      2004.05.13 18:53
      한번 델파이에서 Import ActiveX로 등록 해보세요.. 제가 쓰는 컴터도 win2k server인데 다른언어에서 ...
    • 김민우
    • 2004.05.13 04:31
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.05.13 19:06
      안녕하세요. 최용일입니다. 자료실에 관련 컴포넌트를 올렸습니다. 참고하세요... DSP에 보시면 이것...
    • 김민우
      2004.05.13 19:09
      정말 정말 감사합니다 시삽님!!!  ^^ 많은 도움이 됐습니다. 시삽님도 즐코하세요~~~
    • 유호성
    • 2004.05.13 03:35
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 바보래요
      2004.05.13 18:25
      Enter = #13 BackSpace = #8  (백스페이스는 정확히 잘 모르것네요...찾아보세요...아스...
    • 최용일
      2004.05.13 18:50
      안녕하세요. 최용일입니다. 핸들을 잘못찾으신거 같습니다. 님이 찾으신 static이란 클래스의 핸들은...
    • 술한잔기울이며
      2004.05.13 19:31
      버튼의 핸들을 잘못 찾는다는 말씀을 듣고 간단히 다음과 같이 만들어보았습니다. procedure TForm1.But...
    • 최용일
      2004.05.13 20:00
      안녕하세요. 최용일입니다. 소스가 잘 못되었다는 말은 못하겠네요... 제가 그 윈도우들의 Parent-Child...
    • 박준철
    • 2004.05.13 02:38
    • 0 COMMENTS
    • /
    • 0 LIKES
    • LuckyBoy
    • 2004.05.13 00:13
    • 5 COMMENTS
    • /
    • 40 LIKES
    • 김요한
      2004.05.13 19:28
      LuckyBoy님께서 원하시는 일을 잘 이해를 못해서 축구경기로 예를 들어 보겠습니다. 경기는 전후반 45...
    • 너구리
      2004.05.13 00:42
      delay 함수가 뭔가요?? 결과를 보기엔 어플리케이션 전체가 3초동안 멈추는게 아닌가 싶은데요.. 그...
    • LuckyBoy
      2004.05.13 01:29
      procedure TIoOperate.Delay(DelayTime: Integer); var   sPast,sNow: Integer; begin  ...
    • 너구리
      2004.05.13 02:27
      무지하게 슬립하는거군요... 분리하고 싶은게 delay가 아니라 timer 아닌가요?? 자료실에 보면 이름...
    • LuckyBoy
      2004.05.13 04:44
      제 질문에 관심 및 답변에 감사드립니다. 말씀하신대로 Sleep을 사용하면 Sleep동안은 멈추지요. 하지...
    • 라용수
    • 2004.05.12 22:46
    • 2 COMMENTS
    • /
    • 0 LIKES
    • nilriri™
      2004.05.26 11:09
    • 채창훈
      2004.05.13 01:36
      안녕하세요.. 정확한 답변이 될 수 있을런지 모르겠네요.. 저는 델파이 5 버젼을 쓰는데 위와 같은 ...
    • 최석기
    • 2004.05.12 20:21
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박진규
    • 2004.05.12 19:42
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김지훈
    • 2004.05.12 13:44
    • 4 COMMENTS
    • /
    • 0 LIKES
    • cell
      2004.05.13 00:47
      INSERT INTO test values ('DD', '06/05/2004') 와 같이 날짜형태를 바꿔주면 텍스트 형태의 SQL을 ...
    • cell
      2004.05.13 00:34
      파라메터로 넘기면 되지 않을까요.... sql:=insert  ........... into   value...
    • 바보래요
      2004.05.12 17:48
      sql문장은 string입니다.  그러니 날자는 string로 형태를 바꾸어야 합니다... 물론 다른...
    • 김지훈
      2004.05.12 20:57
      답변감사합니다.. 제가 질문 쿼리를 조금 잘 못쓴거 같습니다.. 예.. datetostr함수를 사용해서 작성 하...
    • 박기선
    • 2004.05.12 10:16
    • 0 COMMENTS
    • /
    • 0 LIKES
    • ㅣㅣ
    • 2004.05.12 09:17
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 바보래요
      2004.05.12 17:50
      계산된 값을 그리드에 넣을때는... StringGrid.Cells[i, j] := IntToStr( i * j ); 이런식이구요...
    • 유정헌
    • 2004.05.12 07:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 바보래요
      2004.05.12 17:51
      타이머를 쓰지 않아도 될듯... 시작시 시간을 저장해 두었다가  프로그램을 종료할때 ...
    • 전덕성
    • 2004.05.12 03:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 너구리
      2004.05.12 03:36
      말씀하신대로 해상도의 차이인거 같은데요.. 프로퍼티에 있는 height, width 의 단위가 pixel 인거 같은...