Callback

Callback 함수

  • 다른 프로그램 또는 다른 모듈에서 호출될 함수를 알려주고, 그 함수를 호출하도록 하는 방법
  • 일반적으로 OS가 호출할 어플리케이션의 함수를 지정해 특정한 사건 / 메세지가 발생하면 호출하도록 지정
  • 일반 함수 호출
    • 클라이언트에서 서버의 함수를 호출하여 사용
  • 콜백 함수 호출
    • 함수 포인터를 이용에 콜백함수를 요청
    • 서버에서 즉시 사용할 지, 콜백함수를 등록한 후 추후에 사용할지를 결정

Event & Handler

  • 특정 이벤트의 처리를 위한 핸들러를 등록
  • 서버 측에서 특정 이벤트 발생 하면 핸들러를 호출
//////////////////////////////////////////////////
// Server
// 함수 포인터 정의
typedef void(*CALLBACK_FUNC)(int); 

// 실제 콜백함수를 다루기 위한 전역 변수 버퍼
CALLBACK_FUNC cbf = NULL; 

// 콜백 등록 함수
// 클라이언트에서 불러올 수 있음
void RegistCallback(CALLBACK_FUNC cb)
{
	cbf = cb;
}

// 콜백 테스트를 위한 함수
void StartCallback()
{
	if(cbf == NULL)
	{
		cout << "Callback Function is not Registed" << endl;
		return;
	}

	cout << "Server calls CB." << endl;
	cbf(1); // 서버 측에 등록된 콜백함수 호출 / 인자로 1을 전달.
	
}

//////////////////////////////////////////////////
// Client 
void UserCallback(int n)
{
	if(n == 1)
		cout << "True" << endl;
	else
		cout << "False" << endl;
}

//////////////////////////////////////////////////
// 실행
int main()
{
	// Client
	RegistCallback(UserCallback); // Callback 등록

	// ...

	// Server 
	StartCallback(); 

	return 0;
}
//////////////////////////////////////////////////

출처

Categories: ,

Updated: