| Programming Guide | WideStudio/MWT Index Table of contents |
쓰레드
쓰레드 클래스를 사용하는 장시간 처리를 실행하기
WSCvthread 클래스를 사용하면 장시간 걸리는 처리를 실행할 수 있습니다.
장시간 걸리는 처리를 실행하려는 하나의 쓰레드와 따로 동작하는 쓰레드를 THREAD-STARTED 트리거(trigger)로 기동되는 이벤트 프로시저로서 실장합니다.#include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- //자식 쓰레드로서 실행하는 이벤트 프로시저 void thread_ep(WSCbase* object){ // 장시간 걸리는 처리 //.... }쓰레드를 실행하려며는, 쓰레드 인스턴스의 executeThread() 멤버 함수를 호출합니다.//THREAD-STARTED 트리거에서 설정한 이벤트 프로시저를 //자식 쓰레드로서 실행 newvthr_000->executeThread();executeThread() 멤버 함수가 호출한 THREAD-STARTED 트리거에서 설정한 이벤트 프로시저는, 부모 쓰레드와 동기하지 않는 자식 쓰레드로서 동작하기 때문에, 쓰레드에 대해서는 안전하지 않는 WideStudio의 GUI 인스턴스를 배타제어 없는 채 접근하지 마십시오. WideStudio의 GUI 인스턴스에 대하여 쓰레드안에서 처리를 실행한 결과를 표시시켜 싶은 경우는, 쓰레드 인스턴스에 sendActivateEvent() 멤버 함수를 써, 부모 쓰레드에 전달합니다. sendActivateEvent() 멤버 함수를 호출하면, 부모 쓰레드에서 ACTIVATE 이벤트가 발생해서, 이 이벤트 프로시저안에서 안전히 WideStudio의 GUI 인스턴스에 접근할 수 있습니다.
아래는 ACTIVATE 트리거로 쓰레드 인스턴스에 전달한 것입니다.#include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- void thread_ep(WSCbase* object){ //장시간 걸리는 처리 //.... //부모 쓰레드에 ACTIVATE 이벤트를 전달 object->sendActivateEvent(); }부모 쓰레드에서 실행하려는 ACTIVATE 트리거에 의하는 이벤트 프로시저를 기술하고, 아래 사용예와 같이 자식 쓰레드와 동기하고 WideStudio의 GUI 인스턴스를 사용해서 표시 처리를 할 수 있습니다.#include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- //부모 쓰레드에서 동작한다. void activate_ep(WSCbase* object){ //부모 쓰레드에 ACTIVATE 이벤트를 전달 newvlab_000->setProperty(WSNlabelString, "자식 쓰레드의 처리가 완료!"); }쓰레드에서 WideStudio의 GUI 인스턴스에 접근
쓰레드 클래스에 의해 생성된 자식 쓰레드에서, 부모 쓰레드에서 실행되는 WideStudio의 GUI 인스턴스에 접근하려는 경우, 부모 쓰레드를 잠금(lock)을 해서, 충돌를 비합니다.#include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- void thread_ep(WSCbase* object){ //자식 쓰레드에서 처리 //.... //충돌이 발생하지 않도록 부모 쓰레드를 일시적으로 잠금을 한다. WSGIappDev()->lock(); //부모 쓰레드에 있은 WideStudio/MWT의 인스턴스에 접근 newvlab_000->setProperty(WSNlabelString, "자식 쓰레드에 처리가 완료!"); WSGIappDev()->unlock(); }
| Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |