![]() | Programming Guide | WideStudio/MWT Index Table of contents |
¹ü¿ë ¾²·¹µå / ¼¼¸¶Æ÷¾î / ¹ÂÅØ½º
¹ü¿ë ¾²·¹µå Ŭ·¡½º¸¦ »ç¿ëÇÏ´Â ¾²·¹µå »ý¼º
WSDthread Ŭ·¡½º¸¦ ÀÌ¿ëÇϸÕ, ÇÁ·Î±×·¥À§¿¡¼ ¾²·¹µå¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù
btnop() ÇÔ¼ö°¡ ¹öư Ŭ¸¯µî À̺¥Æ®¿¡ ÀÇÇØ ½ÇÇàµÉ À̺¥Æ® ÇÁ·Î½ÃÀú º»Ã¼ÀÔ´Ï´Ù. ±× À̺¥Æ® ÇÁ·Î½ÃÀúÀ§¿¡¼ WSDthread Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ »ý¼ºÇϰí, ¾²·¹µå·Î¼ ½ÇÇàÇϰí½ÍÀº ÇÔ¼ö thread_func()¸¦ ±â¼úÇϸé, ¾²·¹µå°¡ »ý¼ºµË´Ï´Ù. ±×¸®°í ¾²·¹µå·Î¼ µ¿ÀÛÇÏ´Â thread_func()À§¿¡¼, execCallback() ¸â¹ö ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é ºÎ¸ð ¾²·¹µå¿¡ À̺¥Æ®¸¦ Àü´ÞÇÒ ¼ö ÀÖ½À´Ï´Ù. execCallback() ¸â¹ö ÇÔ¼ö¸¦ È£ÃâÇϸé, ºÎ¸ð ¾²·¹µåÀ§¿¡¼, setCallbackFunction() ¸â¹ö ÇÔ¼ö¿¡¼ ±â¼úµÈ Äݹé ÇÔ¼ö°¡ µ¿ÀÛÇØ¼, ¾²·¹µå¿Í ºÎ¸ð ¾²·¹µå»çÀÌ µ¿±â 󸮸¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù.#include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- WSDthread* thr = NULL; //ÀÚ½Ä ¾²·¹µå·Î¼ ½ÇÇàÇÒ ÇÔ¼ö¸¦ Á¤ÀÇ void* thread_func(WSDthread* obj,void* ptr){ long cnt= (long)ptr; while(1){ cnt++; obj->execCallback((void*)cnt); //ºÎ¸ð ¾²·¹µå¿¡ Àü´Þ #ifdef MSW Sleep(1000); #else sleep(1); #endif } return NULL; } //¾²·¹µå¿¡¼ Àü´ÞµÇ¾î¼, ºÎ¸ð ¾²·¹µå¿¡¼ ½ÇÇàµÉ Äݹé ÇÔ¼ö void callback_func(WSDthread*,void* val){ long cnt = (long)val; //Áõ°¡µÈ ¼ýÀÚ¸¦ Ç¥½ÃÇÕ´Ï´Ù. newvbtn_000->setProperty(WSNlabelString,cnt); } //À̺¥Æ® ÇÁ·Î½ÃÀú. ¹öư Ŭ¸¯µî À̺¥Æ®·Î ½ÇÇà. void btnop(WSCbase* object){ if (thr == NULL){ thr = WSDthread::getNewInstance(); thr->setFunction(thread_func); thr->setCallbackFunction(callback_func); thr->createThread((void*)100); }else{ exit(0); } }createThread() ¸â¹ö ÇÔ¼ö¿¡ ÀÇÇØ ±âµ¿µÛ ¾²·¹µå ³»ºÎ¿¡¼´Â, ºÎ¸ð ¾²·¹µå¿Í µ¿±âÇÏÁö ¾Ê´Â ÀÚ½Ä ¾²·¹µå·Î¼ µ¿ÀÛÇϱ⠶§¹®¿¡, ¾²·¹µå¿¡ ´ëÇØ¼´Â ¾ÈÀüÇÏÁö ¾Ê´Â WideStudioÀÇ GUI ÀνºÅϽº¸¦ ¹èŸÁ¦¾î ¾ø´Â ä Á¢±ÙÇÏÁö ¸¶½Ê½Ã¿À. WideStudioÀÇ GUI ÀνºÅϽº¿¡¼ ¾²·¹µå¾È¿¡¼ ó¸®ÇÑ °á°ú¸¦ Ç¥½Ã½ÃŰ°í ½ÍÀ» °æ¿ì´Â, ¾²·¹µå ÀνºÅϽº¿¡ execCallback() ¸â¹ö ÇÔ¼ö¸¦ »ç¿ëÇØ¼, ºÎ¸ð ¾²·¹µå¿¡ Àü´ÞÇÒ ¹æ¹ýÀ» ¾²°í, ºÎ¸ð ¾²·¹µåÀ§¿¡¼ Ç¥½Ã 󸮸¦ Çϸé ÁÁ½À´Ï´Ù.¹ÂÅØ½º
¹ÂÅØ½º¸¦ ¾²¸é, º¹¼öÀÇ ¾²·¹µå°¡ µ¿ÀÛÇÏ´Â Äڵ忡 ´ëÇØ¼, µ¿½Ã¿¡ Çϳª ¾²·¹µå ¹Û¿¡ µ¿ÀÛÇÏÁö ¾Êµµ·Ï, ¹èŸÀç¾îÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾Æ·¡ ¿¹Á¦¿¡¼´Â, ¹ü¿ë ¾²·¹µå¸¦ ½á¼ »ý¼ºµÛ º¹¼ö ¾²·¹µå°¡ ½ÇÇàÁß, µ¿½Ã¿¡ º¹¼ö ½ÇÇàÇÏ¸é ¾ÈµÈ Ã³¸®¿¡ ´ëÇØ¼, ¹ÂÅØ½º¸¦ »ç¿ëÇØ¼ ¹èŸ¸¦ °É¸° °ÍÀÔ´Ï´Ù.#include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> #include <WSDthread.h> #include <WSDmutex.h> #include <stdlib.h> #include <unistd.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- #include <newwin000.h> WSDmutex* mutex = NULL; static long cnt=0; //º¹¼öÀÇ ÀÚ½Ä ¾²·¹µå·Î¼ ½ÇÇàÇÒ ÇÔ¼ö¸¦ Á¤ÀÇ void* thread_func(WSDthread* obj,void*){ while(1){ mutex->lock(); cnt++; obj->execCallback((void*)cnt); //ºÎ¸ð ¾²·¹µå¿¡ Àü´Þ #ifdef MSW Sleep(1000); #else sleep(1); #endif mutex->unlock(); } return NULL; } //¾²·¹µå¿¡¼ Àü´ÞµÇ¾î¼, ºÎ¸ð ¾²·¹µå¿¡¼ ½ÇÇàÇÒ Äݹé ÇÔ¼ö void callback_func(WSDthread*,void* val){ long cnt = (long)val; //Áõ°¡µÈ ¼ýÀÚ¸¦ Ç¥½ÃÇÕ´Ï´Ù. newvbtn_000->setProperty(WSNlabelString,cnt); } //À̺¥Æ® ÇÁ·Î½ÃÀú. ¹öư Ŭ¸¯µî À̺¥Æ®·Î ½ÇÇà. void btnop(WSCbase* object){ //do something... if (mutex == NULL){ //¹èŸ¸¦ °É±â À§Çؼ, ¹ÂÅØ½º¸¦ »ý¼º½Ãŵ´Ï´Ù. mutex = WSDmutex::getNewInstance(); mutex->initialize(); //µ¿½Ã¿¡ 10°³ ¾²·¹µå¸¦ »ý¼ºÇϰí, ¼ýÀÚ¸¦ Áõ°¡ÇÕ´Ï´Ù. long i; for(i=0; i<10; i++){ WSDthread* thr = WSDthread::getNewInstance(); thr->setFunction(thread_func); thr->setCallbackFunction(callback_func); thr->createThread((void*)0); } }else{ exit(0); } } static WSCfunctionRegister op("btnop",(void*)btnop);¼¼¸¶Æ÷¾î
¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇϸé, ¹ÂÅØ½º¿Í °°Àº ¹èŸÁ¦¾î, ¹× º¹¼ö ¾²·¹µå°¡ ÇùÁ¶ µ¿ÀÛÇϱ⸦ À§Çؼ ´ë±â 󸮸¦ ÇÒ ¼ö ÀÖ½À´Ï´Ù. ¾Æ·¡ »ç¿ë ¿¹Á¦´Â, ¹ü¿ë ¾²·¹µå¸¦ ½á¼ »ý¼ºµÈ ¾²·¹µå¿¡ ´ëÇØ¼, ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇØ¼ ´ë±â¸¦ ÇÕ´Ï´Ù. ¹öưÀ» Çѹø Ŭ¸¯Çϸé, ¾²·¹µå¸¦ »ý¼ºÇϰí, ¼¼¸¶Æ÷¾î¸¦ »ç¿ëÇØ¼ ¾²·¹µå¸¦ ´ë±â½Ãŵ´Ï´Ù. 2¹øÂ° Ŭ¸¯À¸·Î ¼¼¸¶Æ÷¾î¸¦ ÇØÁ¦Çϰí, ´ë±âÇÏ¿´´ø ¾²·¹µå¸¦ µ¿ÀÛ¸¦ °³½Ã½Ãŵ´Ï´Ù.#include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> #include <WSDthread.h> #include <WSDsemaphore.h> #include <stdlib.h> #include <unistd.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- #include <newwin000.h> WSDsemaphore* sem = NULL; static long cnt=0; //¾²·¹µå·Î¼ µ¿ÀÛÇÒ ÇÔ¼öÀÔ´Ï´Ù. void* thread_func(WSDthread* obj,void* val){ sem->lock(); //¼¼¸¶Æ÷¾î¿¡ ÀÇÇØ ´Ù±âÇÕ´Ï´Ù. while(1){ obj->execCallback((void*)cnt); #ifdef MSW Sleep(1000); #else sleep(1); #endif cnt++; } return NULL; } //¾²·¹µå¿¡¼ Àü´ÞµÇ¾î¼, ºÎ¸ð ¾²·¹µå¿¡¼ ½ÇÇàÇÒ Äݹé ÇÔ¼ö void callback_func(WSDthread*,void* val){ long cnt = (long)val; //Áõ°¡µÈ ¼ýÀÚ¸¦ Ç¥½ÃÇÕ´Ï´Ù. newvbtn_000->setProperty(WSNlabelString,cnt); } //À̺¥Æ® ÇÁ·Î½ÃÀú. ¹öư Ŭ¸¯µî À̺¥Æ®·Î ½ÇÇà. void btnop(WSCbase* object){ //do something... if (sem == NULL){ //¼¼¸¶Æ÷¾î¸¦ ÀÛ¼ºÇÕ´Ï´Ù. sem = WSDsemaphore::getNewInstance(); sem->initialize(); sem->lock(); //¾²·¹µå¸¦ »ý¼ºÇÕ´Ï´Ù. WSDthread* thr = WSDthread::getNewInstance(); thr->setFunction(thread_func); thr->setCallbackFunction(callback_func); thr->createThread((void*)0); object->setProperty(WSNlabelString,"Start Thread"); }else{ //2¹øÂ° ½ÇÇà½Ã¿¡ ¼¼¸¶Æ÷¾î¸¦ ÇØÁ¦Çϰí, ´ë±âÇÏ¿´´ø ¾²·¹µå¸¦ µ¿ÀÛ½Ãŵ´Ï´Ù. sem->unlock(); //start the waiting thread. } } static WSCfunctionRegister op("btnop",(void*)btnop);
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |