2009-11-26 11 views
0

내 서버 응용 프로그램이 클라이언트에서 입력을 읽는 동안 콜백 함수를 사용하여 백그라운드에서 실행할 타이머를 구현하도록 제안했습니다. 나는 온라인에서 설명을 들여다 보았으나 누군가가 나에게 더 간단한 비유를 줄 수 있으면 좋겠다.콜백 함수

감사합니다.

+0

운영 체제? Op Sys 기능을 사용하거나 자신 만의 기능을 사용할 계획입니까? – Elemental

+0

operatin 시스템은 windows입니다. 그들은 나에게 몇 가지 win32 물건을 보여 주었다. – NeverAgain

답변

2

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

  1. SetTimer 당신이 콜백 (콜백 함수가 메시지를 처리의 결과로 호출)를 사용하는 경우에도 메시지를 사용합니다. 따라서 메시지 펌프를 실행하지 않으면 SetTimer를 사용할 수 없습니다.

  2. 콜백은 운영 체제에서 호출합니다. 콜백은지면의 구멍에서 C++ "this"포인터를 모르기 때문에 콜백은 전역 C 스타일 함수 또는 정적 멤버 여야합니다.

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

  4. 스레딩 및 CreateWaitableTimer를 고려해 볼 수도 있지만 대기 타이머를 자주 사용하지 않으므로 주석을 달 수 없습니다.

백그라운드에서 작업해야하는 경우 스레드를 사용하면 문제를 해결하는 훨씬 더 우아한 방법이 될 수 있습니다. 스레딩 할 때 작업을 청크로 나눌 필요가 없습니다 (타이머에서 작업을 시작하는 경우).물론 스레드가 GUI를 만질 수는 없으므로 스레딩을 시작하면 수명이 이 약간 복잡해집니다. 웹 사이트 here에는 작업 스레드에 대한 소개가 있습니다.

0

당신의 질문은 상당히 불분명하지만, 그들은 당신이 스레드를 만들고 그 스레드에서 당신의 기능을 실행할 것을 제안하고있을 것입니다.

시스템 별 Thread 클래스를 서브 클래 싱하여 수행 할 수 있습니다. 어떤 종류의 콜백 함수를 인수로 사용하여 같은 클래스를 생성함으로써; 몇 가지 제한 시간 후 콜백 함수를 호출하는 타이머를 생성하여 ... 더 구체적인 질문없이 더 구체적인 조언을 드릴 수 없습니다.

+0

스레드없이 이것을 할 수 있습니까? 스레드를 쉽게 만들 수 있습니까? 아직 멀티 스레드를 배우지 못했습니다. 스레드에 대한 답변에서 벗어나는 이유는 무엇입니까? 하지만 그것은 나를위한 유일한 길일 것 같습니다 ... – NeverAgain

+0

"백그라운드에서 무언가를 실행"하고 싶을 때는 언제나 별도의 스레드 또는 프로세스를 사용하려고 생각하고있을 것입니다. –

1

유추?

콜백 함수에 대한 간략한 설명을 보려면 여기를보세요 : 콜백와 타이머를 사용
What is a “callback” in C and how are they implemented?

'통화 기능은 모든 Y 초 X'하고 말하는 것입니다 멀티 태스킹을 지원하는 시스템, 즉 기능 원래 함수가 무엇을 하던지 상관없이 두 번째 실행 스레드에서 매 y 초마다 호출됩니다.

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

편집 : Windows에서는 SetTimer 기능을 사용할 수 있습니다. WM_TIMER 메시지를 윈도우의 메시지 대기열에 게시합니다. 메시지 대기열은 메시지 루프가 처리하거나 지정한 콜백 함수를 호출하기 위해 기본 메시지 프로 시저로 넘겨 줄 수 있습니다. 창문이 없다면 어떻게 될지 모르겠지만 시도해보십시오.