리소스 ID가 추가되고 WM_TIMER 메시지를 기반으로 타이머를 사용하고 있습니다. OnTimer()
에 DrunkenDragon()
과 같은 루틴을 호출하고 싶지만 SetTimer(id,10sec,NULL)
을 호출 한 후에는 한 번만 호출하면됩니다. 우리는 KillTimer()
에 DrunkenDragon()
루틴을 호출하면 해결할 수 있음을 알고 있습니다. 이걸로가는 것도 괜찮습니까? 아니면 타이머가있는 뭔가를 놓치고 있습니까?WM_TIMER 메시지를 한 번만 생성하는 setTimer()
0
A
답변
0
int CYourDialog::OnInitDialog()
{
__super::OnInitDialog();
SetTimer(0x10, 10000, NULL);
return true;
}
void CYourDialog::OnTimer(UINT_PTR ignore)
{
DrunkenDragon();
}
메시지 맵에 ON_WM_TIMER
이 있는지 확인하십시오.
0
WM_TIMER 메시지의 생성을 중지하기 위해 시스템에 KillTimer를 사용해야 할 필요가 있습니다.
CreateTimerQueueTimer를 사용하고 매개 변수를 콜백이 한 번만 호출되는 방식으로 설정할 수도 있습니다. WindowClass.h에서
그래서,
0
(내가 한 가능한 답변에 만족처럼 만 경우 다른 사람이 대답이 건너 온다), 당신이 할 수있는 일은을 열거 사용할 타이머 식별자 원시 숫자 값을 사용할 수는 있지만 기호를 사용하면 장기적으로 더 쉽게 작업 할 수 있습니다.
class WindowClass : CWnd
{
// other parts of the interface...
protected:
enum
{
TIMER_MAIN_UPDATE = 1,
TIMER_PLASTERED_DRAGON
};
};
한편, 다시하지만 당신이 창을 만든 것 후 10 초 수행 할 경우에만 어떤 좋은
int WindowClass::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
// { ... other initialization code }
// In case you want to do other types of updates at regular intervals.
SetTimer(TIMER_MAIN_UPDATE, 1000, NULL);
// Note the symbolic identifiers.
SetTimer(TIMER_PLASTERED_DRAGON, 10000, NULL);
return 0;
}
, WindowClass.cpp에서에서.
void WindowClass::OnJustGotPaid()
{
// { ... other handling }
// Since our dragon is a real lightweight, it apparently only takes
// 10 seconds to get him puking up flaming vomit.
SetTimer(TIMER_PLASTERED_DRAGON, 10000, NULL);
}
을가 실제 이벤트, 그것은 일반적으로 윈도우 OnTimer() 콜백에서 처리됩니다 처리 할 시간이 올 때 : 당신이 원하는 때마다 당신은 또한 그냥 다른 이벤트 처리기에서 SetTimer()를 호출 할 수 있습니다. 원할 경우 NULL 대신 SetTimer()의 세 번째 매개 변수에 유효한 함수 포인터를 지정하여 타이머 이벤트를 다른 (사용자 정의) 콜백으로 보낼 수 있습니다.
void WindowClass::OnTimer(UINT_PTR p_timer_id)
{
switch(p_timer_id)
{
default:
break;
case TIMER_MAIN_UPDATE:
// { ... main update code }
break;
case TIMER_PLASTERED_DRAGON:
// Killing the timer first in case DrunkenDragon() takes a good
// long while for whatever reason.
KillTimer(TIMER_PLASTERED_DRAGON);
DrunkenDragon();
break;
}
}
관련 문제
- 1. 레일스에서 플래시 메시지를 한 번만 표시하려면 어떻게해야합니까?
- 2. Windows SetTimer() 함수 사용
- 3. 한 번만
- 4. 한 번만 DialogFragment 표시
- 5. jgrowl에서 한 번만 메시지를 스틱 할 수 있습니까?
- 6. 레일스 자바 스크립트 메시지를 한 번만 가져 오도록 쿠키를 설정하십시오.
- 7. jquery 플러그인 확인. 한 번만 임의의 성공 메시지를 생성하십시오.
- 8. Xcode 무언가가 사실인지 한 번만 확인한 다음 메시지를 표시하는 방법
- 9. jquery를 사용하여 경고 메시지를 한 번만 표시하는 방법은 무엇입니까?
- 10. 앱을 시작할 때 한 번만 메시지를 표시하는 방법은 무엇입니까?
- 11. SetTimer 콜백 호출 안 함
- 12. jquery draggable work 한 번만
- 13. Silverlight는 DispatchTimer를 한 번만 실행합니다.
- 14. Jquery, 방법은 한 번만 inital 페이지로드에 한 번만 사용 하시겠습니까?
- 15. 활동은 한 번만 호출해야합니다.
- 16. 쿠키 - 한 번만 투표
- 17. 타이머가 한 번만 작동합니다.
- 18. 한 번만 메시지 보이기
- 19. 한 번만 정렬 발생
- 20. 한 번만 함수 실행
- 21. 레이크 한 번만 수행
- 22. jQuery에서 한 번만 수행
- 23. div를 한 번만 표시
- 24. 하루에 한 번만 삽입
- 25. ... 그러나에만 AsyncTask를 한 번만
- 26. 플레이어가 한 번만 멈춤
- 27. 한 번만 배경을 칠하십시오
- 28. 버튼이 한 번만 작동합니다
- 29. 데이터베이스에 한 번만 삽입하십시오.
- 30. set_table_name은 한 번만 작동합니까?
왜 resource-id입니까? 카운터 변수를 사용하여 타이머가 처음 실행되는지 여부를 확인할 수 있습니다. – Ajay