none
[VS2008CLI] Timer 와 [VS6.0] Timer 차이점? RRS feed

  • 질문

  • 안녕하세요!! 여러분!

    Window Timer에서 대해서 질문이 있습니다.

    우선 VS 2008버전으로 CLI 언어를 사용하여 실시간 이미지를 표시하고 있습니다.

    시간처리는 Window Timer 로 사용을 했습니다. Frame Rate는 제가 예상하는 8Fps 가 나옵니다.

    하지만, VS 6.0버전으로 API언어를 사용하여 실시간 이미지를 표시하면 Frame Rate 가 7Fps 가

    나옵니다. 실제로 VS2008 , VS6.0 실시간 이미지 체험 속도가 확실이 보입니다.!!

    그래서 VS6.0 Frame Rate를 높이기 위해서 멀티미디어 타이머를 사용을 했지만 이미지가 크게 흔들려

    서 사용을 못하고 있습니다.!

    질문의 요점은 VS2008 Windows Timer 와 VS6.0 Windows Timer 구조가 많이 틀리나요??

    P.s : VS2008, VS6.0 Windows Timer 시간은 똑같이 10ms 입니다.

    2012년 3월 29일 목요일 오전 2:58

답변

  • 기본 타이머 메시지(WM_TIMER 또는 콜백함수)가 플래그성 메시지이기 때문에 지정한 시간을 보장받을수 없습니다.
    기본적으로 시스템 구성의 차이가 미치는 영향보다 실제 이미지를 출력하는데 사용한 함수나 코드의 효율차이로 인해서
    속도 차이가 나는것일겁니다. 예를 들어, 똑같은 함수를 사용했다고 할지라도 SDK 버전에 따라서 API 수행능력에 차이가
    있는 경우도 있습니다.

    결국 현재 작업하시는 내용이 얼마나 빨리 처리되는가에 따라서 타이머가 제때 호출될지 아니면 좀더 지연될지가
    결정될것입니다. 따라서 이야기하신것처럼 일정한 시간을 보장받으시려면 멀티미디어 타이머를 사용하셔야 합니다.
    ( 일반 타이머의 경우, 운영체제의 버전에 따라서도 결과가 다르게 나옵니다. )

     

    그리고 이미지가 크게 흔들린다는 의미가 깜빡임이 있다는 뜻인가요?

    2012년 3월 30일 금요일 오전 6:21
    중재자
  • 이건 타이머 문제가 아니라 동기화와 관련된 문제일듯하네요. 데이터를 수신하는 쪽에서 어떤 문제가 있는지를
    살펴보셔야 할듯합니다. 데이터를 수신하는 부분을 스레드로 구성하셨다면 타이머를 사용해서 출력하기 보다,
    해당 스레드가 수신을 완료한 직후에 PostMessage 를 사용하여 갱신을 하게 하는방법이 더 좋은 방법이고
    스레드를 사용하지 않는다면, 타이머 자체가 작업을 선점할수 있는 능력이 없기 때문에 수신자체에 문제가
    있다는 뜻입니다.

    • 답변으로 표시됨 9SkyGround 2012년 4월 4일 수요일 오전 7:23
    2012년 4월 2일 월요일 오전 8:51
    중재자

모든 응답

  • 기본 타이머 메시지(WM_TIMER 또는 콜백함수)가 플래그성 메시지이기 때문에 지정한 시간을 보장받을수 없습니다.
    기본적으로 시스템 구성의 차이가 미치는 영향보다 실제 이미지를 출력하는데 사용한 함수나 코드의 효율차이로 인해서
    속도 차이가 나는것일겁니다. 예를 들어, 똑같은 함수를 사용했다고 할지라도 SDK 버전에 따라서 API 수행능력에 차이가
    있는 경우도 있습니다.

    결국 현재 작업하시는 내용이 얼마나 빨리 처리되는가에 따라서 타이머가 제때 호출될지 아니면 좀더 지연될지가
    결정될것입니다. 따라서 이야기하신것처럼 일정한 시간을 보장받으시려면 멀티미디어 타이머를 사용하셔야 합니다.
    ( 일반 타이머의 경우, 운영체제의 버전에 따라서도 결과가 다르게 나옵니다. )

     

    그리고 이미지가 크게 흔들린다는 의미가 깜빡임이 있다는 뜻인가요?

    2012년 3월 30일 금요일 오전 6:21
    중재자
  • 깜빡임 보다는 Pixel 들이 빠지고 있습니다. 현재 이미지 출력은 750x800 = 600000byte = 600Kbyte

    합니다. 즉 Len 이 600000byte로 return이 되어서 RawData가 들어 오고 있지만, 간혹 599999,

    599998 이런식으로 들어 오고 있습니다.!! 또한 다중작업 즉, Image를 표시하는 프로그램을 구동하고

    인터넷 이나 다른 작업을 하면 이미지가 600Kbyte가 아닌 599910등 이렇게 들어와서 크게 흔들립니다.

    웹캡경우 CPU가 바뻐도 다른 작업을 해도 이미지가 흔들리지 않습니다.

    혹시나 해서 멀티타이머, 쓰레드 로 돌려도 똑같은 현상이 나옵니다..ㅡㅡ;;

    2012년 4월 1일 일요일 오후 11:56
  • 이건 타이머 문제가 아니라 동기화와 관련된 문제일듯하네요. 데이터를 수신하는 쪽에서 어떤 문제가 있는지를
    살펴보셔야 할듯합니다. 데이터를 수신하는 부분을 스레드로 구성하셨다면 타이머를 사용해서 출력하기 보다,
    해당 스레드가 수신을 완료한 직후에 PostMessage 를 사용하여 갱신을 하게 하는방법이 더 좋은 방법이고
    스레드를 사용하지 않는다면, 타이머 자체가 작업을 선점할수 있는 능력이 없기 때문에 수신자체에 문제가
    있다는 뜻입니다.

    • 답변으로 표시됨 9SkyGround 2012년 4월 4일 수요일 오전 7:23
    2012년 4월 2일 월요일 오전 8:51
    중재자