![]() | Programming Guide | WideStudio/MWT Index Table of contents |
Àá±Ý(lock)¿¡ ÀÇÇÏ´Â ¾²·¹µå Ŭ·¡½º¿Í ÁøÃ´ ´ëÈ »óÀÚ¿¡ ÀÇÇÏ´Â Àå½Ã°£ °É¸®´Â 󸮸¦ ½ÇÇàÇϱâ
¾²·¹µå Ŭ·¡½º¿Í ÁøÃ´ ´ëÈ »óÀÚ¿¡ ÀÇÇÏ´Â Àå½Ã°£ °É¸®´Â 󸮸¦ ½ÇÇàÇϱâ
WSCvthread Ŭ·¡½º¿Í WSCworkingDialog¸¦ »ç¿ëÇϸé, Àå½Ã°£ °É¸®´Â 󸮸¦ ½ÇÇàÁßÀ̶óµµ, È¸é ¹¦È¸¦ Áß´ÜÇÏÁö ¾Ê°í ½ÇÇàÇÒ ¼ö ÀÖ½À´Ï´Ù.
¿©±â¼ °£´ÜÇÏ°Ô ¿¹¸¦ ³ªÅ¸³»¼, ºÎ¸ð ¾²·¹µå¸¦ Àá±ÝÇÏ¸é¼ ¾²·¹µå¿Í ÁøÃ´ ´ëÈ »óÀÚ¸¦ ½ÇÀåÇÒ ¹æ¹ý¿¡ ´ëÇØ¼ ¼³¸íÇÕ´Ï´Ù. ´©¸§ ´ÜÃ߸¦ Ŭ¸¯Çϸé, ½Ã°£ÀÌ °É¸®´Â 󸮸¦ ÀÚ½Ä ¾²·¹µåÀ§¿¡¼ ½ÇÇàÇϰí, ÁøÃ´ ´ëÈ »óÀÚ¸¦ Ç¥½ÃÇÏ´Â ÀÀ¿ëÇÁ·Î±×·¥À» ÀÛ¼ºÇÕ´Ï´Ù.
¸ÕÀú, »õ âÀ» ÇѰ³ ¸¸µé¾î¼, ´©¸§´ÜÃ߸¦ ¹èÄ¡ÇÕ´Ï´Ù. ±×¸®°í WSCworkingDialog¿Í WSCvthread Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ °¢°¢ ¹èÄ¡ÇÏ¿©, ¸íĪÀ» °¢°¢ newwork_001, newvthr_002¶ó°í Áþ½À´Ï´Ù.
´©¸§´ÜÃß¿¡ ´ÙÀ½°ú °°Àº À̺¥Æ® ÇÁ·Î½ÃÀú btnop()À» ¼³Á¤Çϰí, ½Ã°£ÀÌ °É¸° 󸮸¦ ÀÚ½Ä ¾²·¹µåÀ§¿¡¼ ½ÇÇàÇϸé¼, ÁøÃ´ ´ëÈ »óÀÚ¸¦ Ç¥½ÃÇÕ´Ï´Ù. ÇÁ·Î±×·¥¾È¿¡ ÀÖ´Â ÇÁ·¡±×(flag) dialog_vis_status´Â, ÁøÃ´ ´ëÈ »óÀÚÀÇ popup() ¸Þ¼µå¿¡ ÀÇÇϴ ǥ½Ã°¡ Á¾·áÇÑ °ÍÀ», ó¸®ÁßÀÎ ÀÚ½Ä ¾²·¹µå¿¡ Àü´ÞÇϱ⸦ À§ÇÑ ÇÁ·¡±×ÀÔ´Ï´Ù. ÁøÃ´ ´ëÈ »óÀÚ°¡ Ãë¼ÒµÈ °æ¿ì, popup()°¡ ³¡³ ÈÄ¿¡, ÇÁ·¡±×¸¦ False¿¡ º´°æÇϸé, ÀÚ½Ä ¾²·¹µå¿¡¼ ÁøÃ´ ´ëÈ »óÀÚ°¡ ºñÇ¥½Ã »óÅ·ΠÀüȯµÈ °ÍÀ» ºÐ¸íÈ÷ ¾Ë ¼ö ÀÖ½À´Ï´Ù.#include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- #include <newwin000.h> //ÁøÃ´ ´ëÈ »óÀÚ°¡ Ç¥½Ã»óÅÂÀÌ´ÂÁö ³ªÅ¸³»´Â ÇÁ·¡±×(flag) WSCbool dialog_vis_status = False; void btnop(WSCbase* object){ //do something... dialog_vis_status = True; //¾²·¹µå¸¦ »ý¼ºÇÒ Àü¿¡ ÇÁ·¡±×¸¦ ¼³Á¤. //¾²·¹µå¸¦ »ý¼ºÇϰí, 󸮸¦ ½ÇÇàÇÑ´Ù. newvthr_002->executeThread(); //´ëÈ »óÀÚ¸¦ Ç¥½Ã »óÅ·ΠÀüȯÇÑ´Ù. newwork_001->popup(); //(ÁÖÀÇ »çÇ×) ´ëÈ »óÀÚ°¡ ºñÇ¥½Ã »óÅ¿¡ ÀüȯÇÒ ¶§±îÁö ²ö³ªÁö ¾Ê´Â´Ù. dialog_vis_status = False; } static WSCfunctionRegister op("btnop",(void*)btnop);±× ´ÙÀº¿¡, WSCvthread Ŭ·¡½ºÀÇ ÀνºÅϽº newvthr_002¿¡ ´ëÇØ¼, ÀÚ½Ä ¾²·¹µå·Î¼ ½ÇÇàÇÒ Ã³¸®¸¦ ±â¼úÇÑ À̺¥Æ® ÇÁ·Î½ÃÀú thread_proc()À» THREAD-STARTED Æ®¸®°Å(trigger)·Î ¼³Á¤ÇÕ´Ï´Ù. ÁøÃ´ ´ëÈ »óÀÚ¿¡¼ ¾ðÁ¦µçÁö Ãë¼ÒÇÒ ¼ö ÀÖµµ·Ï ÀÚ½Ä ¾²·¹µå·Î¼ ½ÇÇàÇÒ À̺¥Æ® ÇÁ·Î½ÃÀú¸¦ ±â¼úÇÒ ¶§¿¡ Áß¿äÇÑ Á¡Àº, Àå½Ã°£ °É¸®´Â 󸮸¦ ©¸·ÇÏ°Ô ³ª´©¾î¼ Á¶±Ý¾¿ 󸮸¦ ½ÇÇàÇÒ Á¡ÀÔ´Ï´Ù. ¾Æ·¡ ³ªÅ¸³»´Â ¿¡Á¦´Â, ±ä ó¸® Àüü¸¦ 100ȸ·Î ³ª´©¾î¼ ½ÇÇàÇØ¼, º¯¼ö cnt·Î ȸ¼ö¸¦ ¼ÀÇÕ´Ï´Ù. ±×¸®°í, ±× ȸ¼ö¸¦ ±×´ë·Î ÁøÃ´ ´ëÈ »óÀÚÀÇ Ç¥½Ã¸¦ À§Çؼ ÀÌ¿ëÇÕ´Ï´Ù. ÀνºÅϽº´Â ±âº»ÀûÀ¸·Î ¾²·¹µå¿¡ ´ëÇØ¼ ¾ÈÀüÇÏÁö ¾Ê±â ¶§¹®¿¡, ÁøÃ´ ´ëÈ »óÀÚ¿¡ ¼ýÀÚ °ªÀ» Ç¥½Ã½Ã۱⸦ À§Çؼ´Â, WSGIappDev()->lock()À» ½ÇÇàÇØ¼, ºÎ¸ð ¾²·¹µå¸¦ Àá±ÝÇÑ ÈÄ¿¡ ´ëÈ »óÀÚ¿¡ Á¢±ÙÇØ¾ß ÇÕ´Ï´Ù.#include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> #include <unistd.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- #include <newwin000.h> extern long cnt; extern WSCbool dialog_vis_status; void thread_proc(WSCbase* object){ cnt=0; while(1){ //ÁøÃ´ »óȲÀ» ³ªÅ¸³»´Â ¼ýÀÚ¸¦ Áõ°¡ÇÕ´Ï´Ù. cnt++; //¼ýÀÚ °ªÀ» ÁøÃ´ ´ëÈ »óÀÚ¿¡ Ç¥½ÃÇϱ⸦ À§Çؼ, //ºÎ¸ð ¾²·¹µå¸¦ Àá±ÝÇϰí //ºÎ¸ð ¾²·¹µåÀÇ ÁøÃ´ ´ëÈ »óÀÚ¿¡ Á¢±ÙÇÕ´Ï´Ù. WSGIappDev()->lock(); //ÁøÃ´ »óȲÀ» ³ªÅ¸³»´Â ¼ýÀÚ¸¦ ¼Ó¼ºÀ¸·Î¼ ¼³Á¤ÇÕ´Ï´Ù. newwork_001->setProperty(WSNvalue,cnt); //¼ýÀÚ °ªÀÌ 100À» ³Ñ±ä °æ¿ì, ´ëÈ »óÀÚ¸¦ ºñÇ¥½Ã »óÅ·ΠÀüȯÇϰí, //󸮸¦ ³¡¸¶Ä¨´Ï´Ù. if (cnt>100){ newwork_001->setVisible(False); } //ºÎ¸ð ¾²·¹µåÀÇ Àá±ÝÀ» ÇØÁ¦ÇÑ´Ù. WSGIappDev()->unlock(); if (dialog_vis_status == False){ //´ëÈ »óÀÚ°¡ ºñÇ¥½Ã »óÅÂ, Áï Ãë¼ÒµÈ °æ¿ì, 󸮸¦ Á¾·áÇÕ´Ï´Ù. return; } if (cnt > 100){ //©¸·ÇÏ°Ô ³ª´« 󸮸¦ 100ȸ ½ÇÇàÇß´ø °æ¿ì, 󸮸¦ Á¾·áÇÕ´Ï´Ù. return; } //¿©±â¼ Àå½Ã°£ °É¸®´Â 󸮸¦ ©¸·ÇÏ°Ô ³ª´©¾î¼ Á¶±Ý¾¿ ½ÇÇàÈü´Ï´Ù. #ifdef MSW Sleep(1000); #else sleep(1); #endif } } static WSCfunctionRegister op("thread_proc",(void*)thread_proc);¹ü¿ë ¾²·¹µå Ŭ·¡½º¿Í ÁøÃ´ ´ëÈ »óÀÚ¿¡ ÀÇÇÏ´Â Àå½Ã°£ 󸮸¦ ½ÇÇàÇϱâ
WSDthread Ŭ·¡½º¿Í WSCworkingDialogÀ» »ç¿ëÇÏ´Â, ó¸® ½Ã°£ÀÌ °É¸®´Â 󸮸¦ ½ÇÇàÇÏ´Â ¿¡Á¦¸¦ ³ªÅ¸³À´Ï´Ù.
»õ âÀ» ÇѰ³ ¸¸µé¾î¼, ´©¸§´ÜÃ߸¦ ¹èÄ¡ÇÕ´Ï´Ù. ±×¸®°í, WSCworkingDialog Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¹èÄ¡ÇØ¼, ¸íĪÀ» newwork_000¶ó°í Áþ½À´Ï´Ù.
´©¸§´ÜÃß¿¡ ´ÙÀ½°ú °°Àº À̺¥Æ® ÇÁ·Î½ÃÀú btnop()À» ¼³Á¤Çϰí, ½Ã°£ÀÌ °É¸®´Â 󸮸¦ ÀÚ½Ä ¾²·¹µåÀ§¿¡¼ ½ÇÇàÇϸé¼, ÁøÃ´ ´ëÈ »óÀÚ¸¦ Ç¥½ÃÇÕ´Ï´Ù.
ÇÁ·¡±× canceled¸¦ »ç¿ëÇÑ ¾ÈÀüÈ÷ ÀÚ½Ä ¾²·¹µå¸¦ Ãë¼ÒÇÒ ¹æ¹ý, ¹× WSDthread::terminateThread() ¸Þ¼µå¸¦ »ç¿ëÇÑ °Á¦ÀûÀ¸·Î ÀÚ½Ä ¾²·¹µå¸¦ Á¤ÁöÇÏ´Â ¹æ¹ýÀ» ³ªÅ¸³À´Ï´Ù. WSDthread::terminateThread() ¸Þ¼µå¿¡ ÀÇÇÑ ÀÚ½Ä ¾²·¹µå¸¦ Á¤ÁöÇϱâ´Â, ó¸®Áß¿¡ °Á¦ÀûÀ¸·Î Á¤ÁöÇϱ⠶§¹®¿¡, ÆÄÀÏ ÀÚ¿ø¸¦ Á¦¾îÇϱâµî, ÀÚ¿øÁ¦¾î 󸮿¡´Â ¸ÂÁö ¾Ê½À´Ï´Ù.
ÀÚ½Ä ¾²·¹µå¸¦ °Á¦ Á¾·á½ÃŰ´Â ¿¡Á¦ÀÔ´Ï´Ù.
#include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> #include <WSDthread.h> #include <stdlib.h> #include <unistd.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- #include <newwin000.h> WSDthread* thr = NULL; WSCbool canceled = False; //ÀÚ½Ä ¾²·¹µå·Î¼ µ¿ÀÛÇÏ´Â ÇÁ·Î½ÃÀú void* thread_func(WSDthread* obj,void*){ //ÁøÃ´ »óȲÀ» ³ªÅ¸³»´Â ¼ýÀÚ long cnt= 0; while(1){ //¼ýÀÚ¸¦ Áõ°¡ÇÕ´Ï´Ù. cnt++; //¼ýÀÚ °ªÀ» ÁøÃ´ ´ëÈ »óÀÚ¿¡ Ç¥½ÃÇϱ⸦ À§Çؼ, //ºÎ¸ð ¾²·¹µå¸¦ Àá±ÝÇÑ ÈÄ¿¡ //ºÎ¸ð ¾²·¹µåÀÇ ÁøÃ´ ´ëÈ »óÀÚ¿¡ Àâ±ÙÇÕ´Ï´Ù. WSGIappDev()->lock(); //ÁøÃ´ »óȲÀ» ³ªÅ¸³»´Â ¼ýÀÚ¸¦ ¼Ó¼ºÀ¸·Î¼ ¼³Á¤ÇÕ´Ï´Ù. newwork_001->setProperty(WSNvalue,cnt); //¼ýÀÚ °ªÀÌ 100À» ³Ñ±ä °æ¿ì, ´ëÈ »óÀÚ¸¦ ºñÇ¥½Ã »óÅ·ΠÀüȯÇϰí, //󸮸¦ ³¡¸¶Ä¨´Ï´Ù. if (cnt>100){ newwork_001->setVisible(False); } //ºÎ¸ð ¾²·¹µåÀÇ Àá±ÝÀ» ÇØÁ¦ÇÕ´Ï´Ù. WSGIappDev()->unlock(); //¿©±â¼ Àå½Ã°£ °É¸®´Â 󸮸¦ ©¸·ÇÏ°Ô ³ª´©¾î¼ Á¶±Ý¾¿ ½ÇÇàÈü´Ï´Ù. #ifdef MSW Sleep(1000); #else sleep(1); #endif //¼ýÀÚ °ªÀÌ 100À» ³Ñ±ä °æ¿ì, 󸮸¦ ³¡³À´Ï´Ù. if (cnt == 100){ return NULL; } } return NULL; } //¹öư Ŭ¸¯¿¡ ÀÇÇØ¼, ÁøÃ´ ´ëÈ »óÀÚ¸¦ Ç¥½ÃÇϰí, 󸮸¦ ½ÃÀÛ. void btnop(WSCbase* object){ if (thr == NULL){ //¾²·¹µå ÀνºÅϽº¸¦ »ý¼º. thr = WSDthread::getNewInstance(); //ÀÚ½Ä ¾²·¹µå·Î¼ ½ÇÇàÇÏ´Â ÇÁ·Î½ÃÀú¸¦ ¼³Á¤. thr->setFunction(thread_func); //ÀÚ½Ä ¾²·¹µå¸¦ »ý¼º. thr->createThread(NULL); //ÁøÃ´ ´ëÈ »óÀÚ¸¦ Ç¥½Ã. long val = newwork_000->popup(); if (val == WS_DIALOG_OK){ }else{ //ÀÚ½Ä ¾²·¹µå¸¦ °Á¦ Á¾·áÇÒ °æ¿ì. thr->terminateThread(); } }else{ exit(0); } } static WSCfunctionRegister op("btnop",(void*)btnop);ÀÚ½Ä ¾²·¹µå¸¦ ÇÁ·¡±×(flag)¸¦ ÂüÁ¶ÇÏ¿© ¾ÈÀüÈ÷ Á¾·áÇÏ´Â ¿¹Á¦ÀÔ´Ï´Ù.
#include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> #include <WSDthread.h> #include <stdlib.h> #include <unistd.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- #include <newwin000.h> WSDthread* thr = NULL; WSCbool canceled = False; //ÀÚ½Ä ¾²·¹µå·Î¼ µ¿ÀÛÇÏ´Â ÇÁ·Î½ÃÀú void* thread_func(WSDthread* obj,void*){ //ÁøÃ´ »óȲÀ» ³ªÅ¸³»´Â ¼ýÀÚ long cnt= 0; while(1){ //¼ýÀÚ¸¦ Áõ°¡ÇÕ´Ï´Ù. cnt++; //¼ýÀÚ °ªÀ» ÁøÃ´ ´ëÈ »óÀÚ¿¡ Ç¥½ÃÇϱ⸦ À§Çؼ, //ºÎ¸ð ¾²·¹µå¸¦ Àá±ÝÇϰí, //ºÎ¸ð ¾²·¹µåÀÇ ÁøÃ´ ´ëÈ »óÀÚ¿¡ Á¢±ÙÇÕ´Ï´Ù. WSGIappDev()->lock(); //ÁøÃ´ »óȲÀ» ³ªÅ¸³»´Â ¼ýÀÚ¸¦ ¼Ó¼ºÀ¸·Î¼ ¼³Á¤ÇÕ´Ï´Ù. newwork_001->setProperty(WSNvalue,cnt); //¼ýÀÚ °ªÀÌ 100À» ³Ñ±ä °æ¿ì, ´ëÈ »óÀÚ¸¦ ºñÇ¥½Ã »óÅ·ΠÀüÈ¯ÇØ¼ //󸮸¦ ³¡³À´Ï´Ù. if (cnt>100){ newwork_001->setVisible(False); } //ºÎ¸ð ¾²·¹µåÀÇ Àá±ÝÀ» ÇØÁ¦ÇÕ´Ï´Ù. WSGIappDev()->unlock(); //¿©±â¼ Àå½Ã°£ °É¸®´Â 󸮸¦ ©¸·ÇÏ°Ô ³ª´©¾î¼ Á¶±Ý¾¿ ½ÇÇàÈü´Ï´Ù. #ifdef MSW Sleep(1000); #else sleep(1); #endif //¼ýÀÚ °ªÀÌ 100À» ³Ñ±ä °æ¿ì, 󸮸¦ ³¡³À´Ï´Ù. if (cnt == 100){ return NULL; } //ÇÁ·¡±×(flag)¸¦ ÂüÁ¶Çϰí, 󸮸¦ ÁßÁöÇØ¾ß Çϴ°¡¸¦ ÆÇ´ÜÇÕ´Ï´Ù. if (canceled != False){ return NULL; } } return NULL; } //¹öư Ŭ¸¯¿¡ ÀÇÇØ¼, ÁøÃ´ ´ëÈ »óÀÚ¸¦ Ç¥½ÃÇϰí, 󸮸¦ ½ÃÀÛ. void btnop(WSCbase* object){ if (thr == NULL){ //¾²·¹µå ÀνºÅϽº¸¦ »ý¼º. thr = WSDthread::getNewInstance(); //ÀÚ½Ä ¾²·¹µå·Î¼ ½ÇÇàÇÏ´Â ÇÁ·Î½ÃÀú¸¦ ¼³Á¤. thr->setFunction(thread_func); //ÀÚ½Ä ¾²·¹µå¸¦ »ý¼º. thr->createThread(NULL); //ÁøÃ´ ´ëÈ »óÀÚ¸¦ Ç¥½Ã. long val = newwork_000->popup(); if (val == WS_DIALOG_OK){ }else{ //ÀÚ½Ä ¾²·¹µå¿¡ 󸮸¦ ÁßÁö½Ãŵ´Ï´Ù. canceled = True; } }else{ exit(0); } } static WSCfunctionRegister op("btnop",(void*)btnop);
Copyright(C) WideStudio/MWT Development Team, 1999-2005 | Last modified: Jul 31, 2005 |