문제

누군가가 콜백 함수를 사용하여 내 서버 응용 프로그램이 클라이언트에서 입력을 읽는 동안 백그라운드에서 실행되는 타이머를 구현하라고 제안했습니다.나는 온라인에서 설명을 찾아보았지만 누군가 나에게 더 간단한 비유를 해줄 수 있기를 바랐습니다.

감사해요.

도움이 되었습니까?

해결책

Windows에서 콜백을 사용하여 타이머를 구현하는 방법에는 SetTimer와 timeSetEvent라는 두 가지 방법이 있습니다.기본 사항은 다음과 같습니다.

  1. SetTimer는 콜백을 사용하더라도 메시지를 사용합니다(콜백 함수는 메시지 처리 결과로 호출됩니다).따라서 메시지 펌프를 실행하지 않으면 SetTimer를 실행할 수 없습니다.

  2. 콜백은 땅에 있는 구멍에서 C++ "this" 포인터를 알지 못하는 운영 체제에 의해 호출되므로 콜백은 전역 C 스타일 함수이거나 정적 멤버여야 합니다.

  3. timeSetEvent는 "멀티미디어" 타이머 제품군의 일부이며 메시지 펌프가 필요하지 않습니다.하지만 위의 콜백 함수 서명에 대한 관찰 내용은 여전히 ​​적용됩니다.하지만 콘솔 앱을 작성하는 경우에는 메시지 펌프에 대한 요구 사항이 없다는 점이 중요할 수 있습니다.

  4. 스레딩 및 CreateWaitableTimer를 고려할 수도 있지만 저는 대기 가능 타이머를 자주 사용하지 않으므로 이에 대해 언급할 수 없습니다.

백그라운드에서 작업을 수행해야 하는 경우 스레딩은 문제를 해결하는 훨씬 더 우아한 방법이 될 수 있습니다.스레딩을 할 때 작업을 여러 개의 덩어리로 나눌 필요가 없습니다(타이머에서 작업을 시작하는 경우에는 이렇게 합니다).그러나 물론 스레드는 GUI를 건드릴 수 없으므로 인생은 작은 스레딩을 시작할 때 복잡합니다.내 웹사이트에 작업자 스레드에 대한 소개가 있습니다. 여기.

다른 팁

유추?

콜백 기능에 대한 간단한 설명을 보려면 여기를 살펴보십시오.
C의 "콜백"이란 무엇이며 어떻게 구현됩니까?

콜백이있는 타이머를 사용하면 '초의 호출 기능 X마다'라는 말이 있고 멀티 태스킹을 지원하는 시스템을 사용하면 원래 함수가 수행 할 수있는 일에 관계없이 두 번째 실행 스레드에서 y 초마다 그 함수가 호출됩니다.

편집 : 다른 답변에서 제안 된 바와 같이, 시스템은 두 번째 스레드를 만들지 않을 수 있으며,이 경우 스레드를 직접 만들고 해당 스레드에서 콜백을 설정해야합니다.

편집 : Windows에서는 사용할 수 있습니다 Settimer 기능. WM_TIMER 메시지를 Window의 메시지 큐에 게시합니다.이 메시지는 메시지 루프가 직접 처리하거나 기본 메시지 절차로 넘어 가서 지정한 콜백 기능을 호출 할 수 있습니다. 창문이 없다면 어떻게되는지 잘 모르겠지만 시도해보십시오.

귀하의 질문은 상당히 불분명하지만, 해당 스레드에서 스레드를 만들고 기능을 실행한다고 제안했을 가능성이 있습니다.

이것은 시스템 별을 서브 클래싱하여 수행 할 수 있습니다 Thread 수업; 인수로서 일종의 콜백 함수로 동일한 클래스를 구성함으로써; 시간 제한 후 콜백 함수를 호출하는 타이머를 만들어 ...보다 구체적인 질문 없이는 더 구체적인 조언을 할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top