클래스 정의하고 객체 생성할 때마다 스레드를 펑펑 만들고 싶을 때 다음과 같이 하면 된다.
지금 목적은 객체에 입력 이벤트 감시 스레드를 어태치 하는 것이다.
class IGWindow : public IGWidget
{
public:
...
static void *event_go(void *param);
...
}
void* IGWindow::event_go(void *param)
{
static int t = 0;
int i = 0;
while(1) {
printf("thread! %x, %d, %d, %x, %x, %x, %x--\n", (int)param, i++, t++, (int)event_go, &i, &t);
sleep(1);
}
}
pthread_create(&my_thread, NULL, event_go, (void *)(this));
thread! 313e8, 2, 6, 407a6468, 41f55e14, 407b5694, 0--
thread! 44d50, 2, 7, 407a6468, 42755e14, 407b5694, 0--
thread! 3cf30, 2, 8, 407a6468, 42f55e14, 407b5694, 0--
thread! 313e8, 3, 9, 407a6468, 41f55e14, 407b5694, 0--
thread! 44d50, 3, 10, 407a6468, 42755e14, 407b5694, 0--
thread! 3cf30, 3, 11, 407a6468, 42f55e14, 407b5694, 0--
thread! 313e8, 4, 12, 407a6468, 41f55e14, 407b5694, 0--
thread! 44d50, 4, 13, 407a6468, 42755e14, 407b5694, 0--
thread! 3cf30, 4, 14, 407a6468, 42f55e14, 407b5694, 0--
맨 앞의 주소는 스레드 함수를 생성한 인스턴스 자신의 주소다. 각각 다르다. 두 번째 값은 지역변수가. 각각 달리 잘 관리한다. 세 번째 증가하는 값은 스레드 함수내 static 정적 변수다. 같이 쓰고 있다. 네 번째 주소는 스레드 함수 자신의 주소다. 모두 같다. 다섯번째 주소는 지역변수 i의 주소다. 각각 잘 관리한다. 여섯번째 주소는 정적변수 t의 주소다. 모두 같이 쓴다.
void* IGWindow::event_go(void *param)
{
static int t = 0;
int i = 0;
IGWindow *pp = (IGWindow *)param;
while(1) {
printf("thread! %s--\n", pp->__src.c_str());
sleep(1);
}
}