내 서버 응용 프로그램이 클라이언트에서 입력을 읽는 동안 콜백 함수를 사용하여 백그라운드에서 실행할 타이머를 구현하도록 제안했습니다. 나는 온라인에서 설명을 들여다 보았으나 누군가가 나에게 더 간단한 비유를 줄 수 있으면 좋겠다.콜백 함수
감사합니다.
내 서버 응용 프로그램이 클라이언트에서 입력을 읽는 동안 콜백 함수를 사용하여 백그라운드에서 실행할 타이머를 구현하도록 제안했습니다. 나는 온라인에서 설명을 들여다 보았으나 누군가가 나에게 더 간단한 비유를 줄 수 있으면 좋겠다.콜백 함수
감사합니다.
Windows, SetTimer 및 timeSetEvent에서 콜백을 사용하여 타이머를 구현하는 두 가지 방법이 있습니다. 기본 사항은 다음과 같습니다
SetTimer 당신이 콜백 (콜백 함수가 메시지를 처리의 결과로 호출)를 사용하는 경우에도 메시지를 사용합니다. 따라서 메시지 펌프를 실행하지 않으면 SetTimer를 사용할 수 없습니다.
콜백은 운영 체제에서 호출합니다. 콜백은지면의 구멍에서 C++ "this"포인터를 모르기 때문에 콜백은 전역 C 스타일 함수 또는 정적 멤버 여야합니다.
timeSetEvent는 "멀티미디어"타이머 제품군의 일부이며 메시지 펌프가 필요하지 않습니다. 위의 콜백 함수 서명에 대한 관찰은 여전히 적용됩니다. 콘솔 앱을 작성하는 경우 메시지 펌프 요구 사항이 부족할 수 있습니다.
스레딩 및 CreateWaitableTimer를 고려해 볼 수도 있지만 대기 타이머를 자주 사용하지 않으므로 주석을 달 수 없습니다.
백그라운드에서 작업해야하는 경우 스레드를 사용하면 문제를 해결하는 훨씬 더 우아한 방법이 될 수 있습니다. 스레딩 할 때 작업을 청크로 나눌 필요가 없습니다 (타이머에서 작업을 시작하는 경우).물론 스레드가 GUI를 만질 수는 없으므로 스레딩을 시작하면 수명이 이 약간 복잡해집니다. 웹 사이트 here에는 작업 스레드에 대한 소개가 있습니다.
당신의 질문은 상당히 불분명하지만, 그들은 당신이 스레드를 만들고 그 스레드에서 당신의 기능을 실행할 것을 제안하고있을 것입니다.
시스템 별 Thread
클래스를 서브 클래 싱하여 수행 할 수 있습니다. 어떤 종류의 콜백 함수를 인수로 사용하여 같은 클래스를 생성함으로써; 몇 가지 제한 시간 후 콜백 함수를 호출하는 타이머를 생성하여 ... 더 구체적인 질문없이 더 구체적인 조언을 드릴 수 없습니다.
스레드없이 이것을 할 수 있습니까? 스레드를 쉽게 만들 수 있습니까? 아직 멀티 스레드를 배우지 못했습니다. 스레드에 대한 답변에서 벗어나는 이유는 무엇입니까? 하지만 그것은 나를위한 유일한 길일 것 같습니다 ... – NeverAgain
"백그라운드에서 무언가를 실행"하고 싶을 때는 언제나 별도의 스레드 또는 프로세스를 사용하려고 생각하고있을 것입니다. –
유추?
콜백 함수에 대한 간략한 설명을 보려면 여기를보세요 : 콜백와 타이머를 사용
는 What is a “callback” in C and how are they implemented?
'통화 기능은 모든 Y 초 X'하고 말하는 것입니다 멀티 태스킹을 지원하는 시스템, 즉 기능 원래 함수가 무엇을 하던지 상관없이 두 번째 실행 스레드에서 매 y 초마다 호출됩니다.
편집 : 다른 답변에서 제안 된 것처럼 시스템에서 두 번째 스레드를 만들지 않을 수 있습니다.이 경우 스레드를 직접 만들고 해당 스레드에서 콜백을 설정해야합니다.
편집 : Windows에서는 SetTimer 기능을 사용할 수 있습니다. WM_TIMER 메시지를 윈도우의 메시지 대기열에 게시합니다. 메시지 대기열은 메시지 루프가 처리하거나 지정한 콜백 함수를 호출하기 위해 기본 메시지 프로 시저로 넘겨 줄 수 있습니다. 창문이 없다면 어떻게 될지 모르겠지만 시도해보십시오.
운영 체제? Op Sys 기능을 사용하거나 자신 만의 기능을 사용할 계획입니까? – Elemental
operatin 시스템은 windows입니다. 그들은 나에게 몇 가지 win32 물건을 보여 주었다. – NeverAgain