2012. 8. 13. 17:47

#include<iostream>


#include<Windows.h>


using namespace std;


// 멀티 쓰레드 프로그램을 C++ 클래스로 래핑해 보자 - 안드로이드 원리 

/*

DWORD __stdcall foo( void *p){

return 0;

}


int main(){

CreateThread(0,0,foo,"A",0,0);

}

*/


class Thread{

public: 

void start(){

CreateThread(0,0, _threadLoop,this,0,0);

}


//아래 함수가 static 일수밖에 없는 이유를 알아야 한다

// C 의 콜백함수의 개념을 클래스화 할 때는 결국 static 함수로 해야한다.

static DWORD __stdcall _threadLoop(void *p){

Thread * pThis = static_cast<Thread *>(p);


pThis -> threadLoop();  //this -> theadLoog()로 변경 될 수 있어야 한다.

return 0;

}

virtual void threadLoop(){}


};

//----------------------------------------------------

// 이제 위 라이브러리 사용자는 Thread 의 자식을 만들어서 threadLoop() 가상함수를 재정의한다.

class MyThread : public Thread{

public :

virtual void threadLoop(){

for(int i=0;i<10;i++){

cout << i << endl;

Sleep(1000);


}

}

};


int main(){


MyThread t;

t.start();

int n;

cin >> n;


}


Posted by k1rha