Q&A

  • 타이머 이벤트는 일종의 인터럽트인가?
벽돌깨기 게임을 (델파이 연습으로) 만들고 있습니다. 예상외로 어렵더군요. 특히 알고리듬 ...
각설하고,
타이머 틱 이벤트 마다 ball을 일정거리 만큼 움직이려고 합니다. 문제는 속도.
레벨이 올라갈수록 ball이 빨리 움직이게 하려고 타이머 틱 이벤트 핸들러에 예를 들면
아래처럼....
for i:=0 to speed do Move_ball; // speed는 변수이며 값이 클수록 속도 증가
했습니다. 그런데, 생각과 같이 움직이지 않더군요...
여기서 질문!

타이머 틱 간격이 x초, 타이머 틱 이벤트 핸들러의 실제 코드 수행시간을 y초라고 할 때,
일단, x>y인 경우는 논리적으로 문제 없을 듯.그러나 x<y인 경우는 어떻게 되나요?

핸들러가 중간 쯤 실행되고 있는데, 타이머 틱이 또 발생하면 핸들러의 처음부터 다시 시작되나요? 아니면 핸들러가 수행되는 동안에는 어떤 틱이벤트도 무시당하나요?

TTT

4  COMMENTS
  • Profile
    쿠나 2005.11.29 09:36
    제가 질문하고 제가 답변하는 형국이 되었네요... ^^

    타이머를 두개 설치하고 한 타이머 안에 무한루프를 두었더니, 프로그램이
    먹통이 되는군요.... 그렇다면,
    이벤트핸들러가 작업하는 동안에는 자기를 포함하여 다른 어떤 이벤트도 무시당한다는....
    것으로 결론을 내려도 되~~느 ~~ㄴ~~ㅈ~~ㅣ
    음...결국 자신감이 없어지는군....
    고수님들의 확신이 역시 필요!




  • Profile
    하얀까마귀 2005.11.29 17:29
    안녕하세요 하얀까마귀 입니다.

    오랜만에 글쓰네요. ^^

    질문하신 내용에 약간 문제가 있는듯 하네요...

    일단.. 하나의 프로그램에서..  (그러니까 하나의 쓰레드죠 프로그램도 쓰레드니까.. )  하나의 동작만 합니다.

    그러니까. 님의 말씀대로 하나의 작업중에 다시 WM_Paint 메세지가 발생한다고 해서..
    중간에 멈추고 나가는것이 아닙니다..

    이건 윈도우즈 메세지관련해서 조금 보시면 아실듯 한데...

    메세지를 받으면 이걸 프로그램 내부에서 처리하구요.. 끝이 나면 다음 메세지를 가지고 옵니다.

    만약 처리시간이 타이머 발생시간보다 길다면..  윈도우즈(OS)는 계속해서 해당 프로그램에게 타이머를 넘겨줍니다.. 물론 이런경우에 잘못하면 메세지큐가 넘어버릴수 있으므로. 일정이상 쌓이면 타이머는 사라지게 됩니다.

    사라지는 메세지중에 하나죠..

    또한 시간이 정확하지도 않습니다. 그러니까 1000 이 1초도 아니구요 또한 os는 인터럽트를 이용해서 타이머를 발생시키지만 이걸 프로그램 큐에 넣으므로 당연히 자신의 순서를 기다리게 됩니다.

    따라서 이걸 가져가서 처리하는데 걸리는 시간도 있으므로.. 당연히 정확한 시간이 될수 없습니다. 대략적인 시간이라고 보아야 겠죠..

    밑에 말씀하신 무한루프를 두게되면 그건 어떤 이벤트든 먹통이 됩니다. ( 음.. 이건 착각을 하신듯... )

    그게 쓰레드 내에서가 아니라면요..

    질문내에서.. 타이머가 발생해서 수행하는동안에는 그 다음 타이머가 발생하게되면 아니 타이머 뿐만아니라 어떤 메세지라도 메세지큐에 들어가게 되고 처리가 끝나면 다음 메세지를 가져와서 처리하게 됩니다.

    그럼 도움이 되셧기를...




  • Profile
    최용일 2005.11.29 17:20
    안녕하세요. 최용일입니다.

    그렇지 않습니다. 무한 루프로 도는 이벤트 핸들러가 작동하는 중에도 얼마든지 다른 이벤트가 발생할 수 있습니다.

    주의하실점은 프로세스를 혼자서 독점할려고 하지 말고 Application.ProcessMessages, Sleep등을 이용해서 적절한 시점에서 다른 프로세스가 동작하도록 제어권을 넘겨주셔야겠죠...

    ^^ 항상 즐코하세요...

  • Profile
    쿠나 2005.11.29 19:11
    답변 감사드립니다. 하양까마귀 및 최용일님.....
    T.T;
    그런데, 무슨 말씀인지 하나도 이해가 안되는군요.
    쓰레드가 뭔지, 메세지가 뭔지....sleep이 뭔지.....
    답변해 주신 것을 보면서 제가 산의 어디 쯤에 있는지 대충 감이 오는군요.
    일단, 여기 소나무에 표시를 해두고 갑니다. 나중에 정상에서 내려올 때,
    좋은 추억이 될 듯합니다.

    님들이 주신 답변 중에 나오는 용어들이 무얼 뜻하는 지 이곳저곳 뒤져 봐야 겠네요. 그럼...