KnP House for Daily

Tizen Native App Thread 본문

Tizen/Tizen 개발

Tizen Native App Thread

K.ung 2014.05.25 11:09

Tizen Native App는 다음과 같이 크게 두가지 종류의 Thread를 제공 하는것 같다.


  • Thread
  • EventDrivenThread




interface 인 IRunnable을 주축으로  Thread , EventDrivenThread 를 이용하게 된다. 


단순히 IRunnable 을 사용하게 되면, 


 #include <FBase.h>

      using namespace Tizen::Base;
      using namespace Tizen::Base::Runtime;

        class MyRun
            : public Tizen::Base::Object
            , public Tizen::Base::Runtime::IRunnable
        {
        public:
            Object* Run(void)
            {
                for (int i = 0; i < 10000; ++i)
                {
                    // ...
                }

                return null;
            }
        }


위와 같이 Run() 메서드에서 작업하고 자하는 일을 진행 하면 된다. 


1. Thread


Thread를 알아보쟈


Thread class 는 비동기 실행을 위한  worker thread를 제공 해준다. 또한 멀티 스레딩이 가능하다.

흔히 아는 스레드라고 생각하면 됀다.


아주간단하게 1~10까지 더하는 것을 스레드로 돌려보쟝


using namespace Tizen::Base;
 using namespace Tizen::Base::Runtime;

 class MyThread
  : public Thread
 {
   public:
        MyThread(void)
        {
        }

        virtual ~MyThread(void)
        {
        }

        result Construct(void)
        {
                return Thread::Construct();
        }

        Object* Run(void)
        {
           int sum = 0;
           for(int i=1 ; i<=10 ; i++){
           sum += i;  
            }
           AppLog("sum = %d",sum);
                return null;
        }
 };

/*
*  스레드를 호출하는 메인 클래스
*/
 void
 MyApplication::ThreadSample(void)
 {
        MyThread* pMyThread = new MyThread;
        pMyThread->Construct();
        pMyThread->Start();

        pMyThread->Join();

        delete pMyThread;
 }

Thread 를 상속받은 클래스를 선언하고, 

Thread::Construct()로 스레드 인스터스를 초기화 해준다.


그리고 Run()메서드로 작업할 것들을 써준다. Run()메서드는 IRunnable 인스턴스 없이 start가 가능하며, 리턴 타입은 Object 이다.


스레드를 실행 할 메인 클래스에서는, 객체를 생성하여 Construct()를 호출하고, Start()메서드를 호출하면

Run()메서드가 실행되며 스레드 작업이 시작 된다.


Join()메서드가 호출되면 스레드 작업이 끝났을 때 스레다작업이 종료되며, delete를 통해 객체를 삭제하면됀당.


2. EventDrivenThread


위 그림과 같이 EventDrivenThread는 Thread와 다르게 일정 간격을 두고 작업이 반복 실행되게 해준다. 

Timer class를 이용하여 지정한 시간이 지난 후 Task를 완료 시키고 완료시키고 반복된다.


1~10까지 더하는 작업을 1분 간격으로 진행되는 것을 해보쟝


 using namespace Tizen::Base;
 using namespace Tizen::Base::Runtime;

MyTimerThread::MyTimerThread(void)
	: __pTimer(null)
	, __count(0)
{
}

MyTimerThread::~MyTimerThread(void)
{
	delete __pTimer;
}

result
MyTimerThread::Construct(void)
{
	return EventDrivenThread::Construct();
}

bool
MyTimerThread::OnStart(void)
{
	__pTimer = new Timer();
	__pTimer->Construct(*this);
	__pTimer->StartAsRepeatable(10000);

	return true;
}

void
MyTimerThread::OnStop(void)
{
	__pTimer->Cancel();
}

void
MyTimerThread::OnTimerExpired(Timer& timer)
{
	int sum = 0;

	for(int i=0 ; i<10 ; i++){
		sum += i;
	}
	AppLog("%d",sum);
}

/*
* 여기부턴 스레드를 실행 시키는 메인 클래스 부분
*/
ThreadTestForm::ThreadTestForm(void)
	: check(0)
	, myTimerThread(null)
{
}

ThreadTestForm::~ThreadTestForm(void)
{
	AppLog("ThreadTestForm::~ThreadTestForm");
}


void
ThreadTestForm::ThreadStart(void)
{
	myTimerThread = new MyTimerThread();

	myTimerThread->Construct();
	myTimerThread->Start();
}
void
ThreadTestForm::ThreadStop(void)
{
	myTimerThread->Quit();
	myTimerThread->Join();
	delete myTimerThread;
	myTimerThread = null;
}


전반적으로 Thread와 비슷 한데,  다른 부분은 

Timer class를 생성하여, StartAsRepeatable() 메서드로 반복 시간을 결정하고, 

OnTimerExpired(Timer& timer) 메서드에서 작업을 진행 하게 된다.




저작자 표시 비영리 변경 금지
신고

'Tizen > Tizen 개발' 카테고리의 다른 글

Tizen Native App ListView의 구조  (0) 2014.06.03
Tizen Native App SendUserEvent()의 예상치 못한 결과  (0) 2014.05.26
Tizen Native App Thread  (0) 2014.05.25
Tize Native JSON TYPE별 사용법  (0) 2014.05.22
Tizen Native JSON parsing  (0) 2014.05.22
Tizen Native App HTTP 예제  (0) 2014.05.19
0 Comments
댓글쓰기 폼