디시인사이드 갤러리

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

갤러리 본문 영역

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

디-(116.122) 2009.07.23 03:53:12
조회 194 추천 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/06/10 - -
152448 횽님들 봐주세욤,ㅠ [2] 살암살려,(203.250) 09.10.15 74 0
152447 XE사용하고 있는데 [1] Vita500갤로그로 이동합니다. 09.10.15 82 0
152445 학교 도서관은 도서 신청이 왜케 더디냐... [9] 혼아갤로그로 이동합니다. 09.10.15 95 0
152444 닥눈삼 여겼다고 욕먹을거같어!!!! 횽님들 알켜주세요;;; [12] 미애남편갤로그로 이동합니다. 09.10.15 128 0
152443 GPL 3.0 상업적으로 갖다쓰면 깜빵가나여?? [4] 아잉따잉갤로그로 이동합니다. 09.10.15 162 0
152442 횽들 개발 서적 좀 읽어? [12] 물속의다이아갤로그로 이동합니다. 09.10.15 211 0
152440 앜ㅋㅋㅋㅋ변듣봌ㅋㅋㅋㅋㅋㅋㅋㅋ [1] 유리한갤로그로 이동합니다. 09.10.15 102 0
152439 개쉛기횽을 위한 표절 짤방 [1] 아주아슬갤로그로 이동합니다. 09.10.15 102 0
152438 빵굽는 개발자. 간지좀 나냐? [7] 유리한갤로그로 이동합니다. 09.10.15 219 0
152437 회사 따돌림이라고 하긴 뭣하지만... [6] 아주아슬갤로그로 이동합니다. 09.10.15 187 0
152436 Resharper는 사랑이긴한데... ㅇㄴㅣㅏ갤로그로 이동합니다. 09.10.15 55 0
152434 지상 최대의 난적 [파일명검색] [8] 검색가(211.62) 09.10.15 143 0
152432 잉카 인터넷 표창 [5] Mr.Bation갤로그로 이동합니다. 09.10.15 134 0
152431 회사에도 따돌리고 그런거 있어여?? [8] ㅇㅇ(124.254) 09.10.15 146 0
152430 KT와이브로 에그 문의... [3] 물속의다이아갤로그로 이동합니다. 09.10.15 100 0
152429 일찍일어나는 새는 빨리 뒤진당. [4] yundream(211.189) 09.10.15 131 0
152428 아주쓸쓸횽을 위한 스페셜 짤방 [7] 개쉛기갤로그로 이동합니다. 09.10.15 140 0
152427 인터넷 개통 기념 -- 톰캣의 어원을 알아냈어! 아주아슬갤로그로 이동합니다. 09.10.15 149 0
152426 nhn도 멤버십 생겼네 [5] 빕뱟뱟갤로그로 이동합니다. 09.10.15 177 0
152425 잘못된 옛말 , '일찍 일어나는 새가 먹이를 쳐 얻는다' [4] 개쉛기갤로그로 이동합니다. 09.10.15 161 0
152424 여자애들은 왜이렇게 학점에 목숨거냐 [9] ㄹㄹ(121.157) 09.10.15 198 0
152423 디렉트엑스 10에서부터 멀티스레딩 ... [1] grunt갤로그로 이동합니다. 09.10.15 88 0
152422 흉들 내가 3d라이브러리 가지고 아이폰게임하나 만들라는데 [1] ㅡㅡ(116.36) 09.10.15 97 0
152419 쌈빡하게 포트란 질문. [2] 컴공볍진갤로그로 이동합니다. 09.10.15 74 0
152418 쉘스크립트로 만든 웹서버 [3] JuEUS-U갤로그로 이동합니다. 09.10.15 156 0
152416 핫핫핫 귀여워 [1] 이모군(110.8) 09.10.15 108 0
152414 너님들힘내 편의점습격사건갤로그로 이동합니다. 09.10.15 65 0
152413 진짜 여긴 뭐하는 회사인지 모르겠네... [20] 임베디드(112.150) 09.10.15 307 0
152412 든데 여자교수는정말 ㄱ- [5] 빙글이갤로그로 이동합니다. 09.10.15 265 0
152409 알고리즘이 문제야.ㅠㅠ [10] ㅁㄴㅇㄹ(203.223) 09.10.15 131 0
152408 프갤오빠들 펑션기능있자나영;ㅅ;.. [15] 빙글이갤로그로 이동합니다. 09.10.15 238 0
152405 지금까지 프갤에 남아있는 신사숙녀여러분 ^^ [4] IHF갤로그로 이동합니다. 09.10.15 89 0
152404 미친 말라리아.. 켁큇갤로그로 이동합니다. 09.10.15 60 0
152403 하도 처잤더니 [4] algo갤로그로 이동합니다. 09.10.15 107 0
152398 형님들 도와주세요,ㅠㅠ 간단한거임,ㅎ [7] 제발,(124.216) 09.10.14 93 0
152396 혹시 녹음 할줄 아는횽 없어? ㅠㅠ [1] 전호섭(113.131) 09.10.14 61 0
152395 형들 포트란에서 질문이 있어... [1] 꼐임(210.216) 09.10.14 53 0
152394 리눅스 커널 스케줄링 좀 해본형들 봐줘.. [5] 형들미안(121.169) 09.10.14 105 0
152393 돌아다니다가 랜덤채팅 떡밥을 물었어. [1] IHF갤로그로 이동합니다. 09.10.14 95 0
152392 퇴갤을 알리는...형들, 잘자 [4] 숙신갤로그로 이동합니다. 09.10.14 53 0
152390 프갤 족보를 만드는건 어때.. [8] Vita500갤로그로 이동합니다. 09.10.14 192 0
152389 프갤 족보를 만드는건 어때.. [4] Pupustory갤로그로 이동합니다. 09.10.14 151 0
152388 우울하다..역시.. [1] 허공갤로그로 이동합니다. 09.10.14 43 0
152387 내가 보기엔 최고의 전망은 [23] 오사카(124.56) 09.10.14 274 0
152386 A*알고리즘으로 8퍼즐 만드는거 쉬워? [1] Tulsa갤로그로 이동합니다. 09.10.14 93 0
152383 내 이메일 공개한다. [7] 피로토스갤로그로 이동합니다. 09.10.14 137 0
152382 형들 C# 에서 어떻게 폼만 투명하게 만들어?? [4] ㅠㅠ(123.142) 09.10.14 1444 0
152381 혹시 일산 킨텍스 구경한 횽들잇음?? [3] 허공갤로그로 이동합니다. 09.10.14 66 0
152380 그림쟁이들도 코딩쟁이만큼 짜네여 . . [5] 온순한감자갤로그로 이동합니다. 09.10.14 174 0
152379 기성용 골넣었다 [1] ㅇㅇㅃ갤로그로 이동합니다. 09.10.14 39 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2