디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

나도... 클래스의 멤버를 콜백으로 사용하는 방법

디-(116.122) 2009.07.23 03:53:12
조회 193 추천 0 댓글 3

콜백 함수를 사용하는 많은 경우에 콜백 함수에 들어갈 인자를 정해줄 수 있다. 그런 예 중에 하나가 CreateThread인데, 쓰레드 몸통이 될 함수에 콜백 인자를 하나 줄 수 있다. 클래스의 멤버를 콜백으로 사용하지 못하는 이유가 바로 this가 없다는 점인데(콜백 함수를 호출하는 쪽에서 무슨 인스턴스의 멤버를 호출할 지 어떻게 알겠는가), 이 콜백 인자로 this를 주고 이 인스턴스에 접근하면 멤버 변수고 함수고 마음대로 쓸 수 있을 것이다.

백 마디 말보다 한 줄 코드가 낫다는 격언에 따라 코드를 풀어보면,

class ThreadObject
{
protected:
      static DWORD WINAPI _ThreadProc(LPVOID lpParam)
      {
             ThreadObject* _this=(ThreadObject*)lpParam;
             return _this->ThreadProc(_this->thread_param);
      }
      HANDLE thread_handle;
      DWORD thread_id;
      LPVOID thread_param;

      // ....
public:
      ThreadObject(LPVOID thread_param=NULL)
      {
            this->thread_param=thread_param;
            thread_handle=CreateThread(NULL,0,&ThreadObject::_ThreadProc,this,0,&thread_id);
      }
      DWORD ThreadProc(LPVOID lpParam)
      {
            //  do something
            return 0;
      }

      // ....
};

대충 이런 모양이 될 것이다.

생성자의 CreateThread에서 ThreadProc을 바로 콜백으로 줄 수 없으므로 _ThreadProc이란 더미 콜백을 주고, 그 콜백의 인자로 현재 객체의 주소(this)를 준다. 더미 콜백에선 인자로 넘어온 값을 캐스팅하여 this 포인터를 구하고 인스턴스의 멤버함수를 호출한다. 이렇게 하면 중간에 더미 콜백이 끼었지만 결과적으론 ThreadProc 멤버함수를 쓰레드 함수로 사용하는 효과를 낼 것이다.

꼭 CreateThread뿐만이 아니더라도 콜백에 인자를 줄 수 있는 경우엔 손쉽게 멤버 함수를 콜백으로 사용하도록 구현할 수 있다.

추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 어떤 상황이 닥쳐도 지갑 절대 안 열 것 같은 스타는? 운영자 24/05/20 - -
146823 도느반이 소설가라는게 true 임?? [3] 개쉛기갤로그로 이동합니다. 09.09.08 100 0
146819 요즘 플렉스가 대세야 [4] 도느반갤로그로 이동합니다. 09.09.08 138 0
146818 재범이에 관해서 [8] Vita500갤로그로 이동합니다. 09.09.08 100 0
146816 맑탉앉앍꿇헒횽은 봅니다 [1] Vita500갤로그로 이동합니다. 09.09.08 62 0
146815 매장 직원 교육용이래 [4] 분당살람갤로그로 이동합니다. 09.09.08 88 0
146814 열심히 하려는 후임을 내손으로 짤라야만 하는 마음 [10] 도느반갤로그로 이동합니다. 09.09.08 257 0
146813 암호화 할때 키는 어디에 저장하나요? [6] ㅇㄹ(218.53) 09.09.08 99 0
146811 쿼리문제 답이다. [1] 피로토스갤로그로 이동합니다. 09.09.08 68 0
146810 뇌자알 소환 캐스팅 완료 [9] ㅇㅇㅃ갤로그로 이동합니다. 09.09.08 142 0
146808 난 첫회사에서 짤릴때. [3] rntjr갤로그로 이동합니다. 09.09.08 189 0
146807 쿼리문제인데 답변 좀.. [3] ㅈㅈ(210.94) 09.09.08 59 0
146806 어제 여자 후배가 [4] 유리한갤로그로 이동합니다. 09.09.08 169 0
146805 난 첫회사에서 사직할때 [3] 하이애나갤로그로 이동합니다. 09.09.08 103 0
146803 횽들 질문점... [6] 신발라마갤로그로 이동합니다. 09.09.08 57 0
146800 회사에 일본 여자 사귀고 있는 횽아가 하나 있는데... [5] 물속의다이아갤로그로 이동합니다. 09.09.08 188 0
146797 회사를 그만 두려고 심각하게 고민중입니다. [7] fguy(211.192) 09.09.08 174 0
146795 오예씨발 하느님 감사합니다! [4] 맑탉앉앍꿇헒갤로그로 이동합니다. 09.09.08 134 0
146793 어제 여자 후배가 [23] 숙신갤로그로 이동합니다. 09.09.08 369 0
146792 재범이 얘 결국 탈퇴하네 [9] ㅇㅇㅃ갤로그로 이동합니다. 09.09.08 125 0
146791 내가 그 개새끼다 [2] LightEach갤로그로 이동합니다. 09.09.08 116 0
146790 요즘 날씨 봐서는 [3] 숙신갤로그로 이동합니다. 09.09.08 55 0
146789 나도 예전에 상무님한테 그만두겠다고 했었어. [3] 심심이(203.248) 09.09.08 113 0
146785 어젠 겉저리를 담가 먹었다능 [2] Tathagata갤로그로 이동합니다. 09.09.08 55 0
146784 자신의 닉네임에 대해 좀 더 신중할 필요성이있다. [14] 개쉛기갤로그로 이동합니다. 09.09.08 182 0
146781 일본의 전자회사들은 분연히 떨쳐일어나 새 CPU 를 만들기로 결의하였다. [2] 때릴꺼야?(116.40) 09.09.08 158 0
146780 정보처리기사 실기 옛날처럼 프로그래밍 도입했으면.. [6] 컹곰(124.80) 09.09.08 204 0
146779 ㅇㅇㅃ횽은 봅니다 [2] Vita500갤로그로 이동합니다. 09.09.08 45 0
146778 잠깐.. 프갤고정 sh횽과 .sh 는 다른 인물인듯? [16] 유리한갤로그로 이동합니다. 09.09.08 175 0
146776 점심 먹으러 가기 전에.. 뻘글 2nd [7] .sh(122.36) 09.09.08 96 0
146775 Vita횽아에게 질문... [2] 물속의다이아갤로그로 이동합니다. 09.09.08 70 0
146774 홈페이지 다 만들었다. [2] Vita500갤로그로 이동합니다. 09.09.08 99 0
146772 세상이 점점 바람지케지고 있다 [5] 분당살람갤로그로 이동합니다. 09.09.08 104 0
146771 우리 회사에 OCP 자격증을 가진 처자가 하나 있는데... [6] 물속의다이아갤로그로 이동합니다. 09.09.08 310 0
146770 뻘글.. [2] .sh(122.36) 09.09.08 67 0
146769 어차피 한번사는 세상. [9] yundream(211.189) 09.09.08 141 0
146768 켄트벡과의 만남 [11] fguy(211.192) 09.09.08 197 0
146767 날 까봐라 이숏키들아!!! [7] 개쉛기갤로그로 이동합니다. 09.09.08 131 0
146765 횽들 visual studio로 verilog 쓸 수 있나효? [4] 크리크리크리갤로그로 이동합니다. 09.09.08 68 0
146763 혼자 있고 싶다. [4] yundream(211.189) 09.09.08 79 0
146760 안녕하세요~ 후훗 [18] .sh(122.36) 09.09.08 176 0
146759 빅파일 무료 다운로드 이용권 [5] Vita500갤로그로 이동합니다. 09.09.08 81 0
146758 천재플머를 까지 맙시다. [13] 개쉛기갤로그로 이동합니다. 09.09.08 259 0
146757 근데 실무에서 메모리 할당같은거 쓰긴하나여? [20] 씬입사원갤로그로 이동합니다. 09.09.08 257 0
146756 천재 프로그래머를 보면서 [3] Vita500갤로그로 이동합니다. 09.09.08 125 0
146755 허벌나게 무서운 이야기 [4] 물속의다이아갤로그로 이동합니다. 09.09.08 106 0
146754 무서운 이야기 [6] 유리한갤로그로 이동합니다. 09.09.08 126 0
146753 알고가 회사 그만두겠다고 했을 때 [11] Tathagata갤로그로 이동합니다. 09.09.08 232 0
146752 포인터를 실무에서 쓰나요? [6] 물속의다이아갤로그로 이동합니다. 09.09.08 115 0
146751 형들 C언어의 단점좀가르쳐주세요...? [9] 한듣보(124.0) 09.09.08 174 0
146748 와 c언어 아무것도 모르겠는데 독학으로 얼마나 파야 [4] 난나야(220.72) 09.09.08 89 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2