![]() | Programming Guide | WideStudio/MWT Index Table of contents |
¾²·¹µå Ŭ·¡½º¿Í ÁøÃ´ ´ëÈ »óÀÚ¿¡ ÀÇÇÑ Àå½Ã°£ 󸮸¦ ½ÇÇàÇϱâ
¾²·¹µå Ŭ·¡½º¿Í ÁøÃ´ ´ëÈ »óÀÚ¿¡ ÀÇÇÑ Àå½Ã°£ 󸮸¦ ½ÇÇàÇϱâ
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·Î ȸ¼ö¸¦ ¼ÀÇÕ´Ï´Ù. ±×¸®°í, ±× ȸ¼ö¸¦ ±×´ë·Î ÁøÃ´ ´ëÈ »óÀÚ¿¡¼ Ç¥½Ã¸¦ À§Çؼ ÀÌ¿ëÇÕ´Ï´Ù.#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++; //¼ýÀÚ °ªÀ» ÁøÃ´ ´ëÈ »óÀÚ¿¡ ¹Ý¿µ½Ã۱⸦ À§Çؼ, //ºÎ¸ð ¾²·¹µå¿¡¼ ACTIVATE Æ®¸®°Å·Î À̺¥Æ® ÇÁ·Î½ÃÀú¸¦ ½ÇÇàÇÕ´Ï´Ù. newvthr_002->sendActivateEvent(); 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);ÀνºÅϽº´Â ±âº»ÀûÀ¸·Î ¾²·¹µå¿¡ ´ëÇØ¼ ¾ÈÀüÇÏÁö ¾Ê±â ¶§¹®¿¡, ÁøÃ´ ´ëÈ »óÀÚ¿¡ ¼ýÀÚ °ªÀ» Ç¥½Ã½Ã۱⸦ À§Çؼ´Â, sendActivateEvent() ¸Þ¼µå¸¦ »ç¿ëÇØ¼, ºÎ¸ð ¾²·¹µåÀ§¿¡¼ ACTIVATE¸¦ ÀÇÇÑ À̺¥Æ® ÇÁ·Î½ÃÀú¸¦ ±âµ¿Çؼ, °Å±â¼ ÁøÃ´ ´ëÈ »óÀÚ¿¡ Á¢±ÙÇØ¾ß ÇÕ´Ï´Ù.#include <WScom.h> #include <WSCfunctionList.h> #include <WSCbase.h> //---------------------------------------------------------- //Function for the event procedure //---------------------------------------------------------- #include <newwin000.h> long cnt = 0; void act_ep(WSCbase* object){ //ÁøÃ´ »óȲÀ» ³ªÅ¸³»´Â ¼ýÀÚ °ªÀ» ¼Ó¼ºÀ¸·Î¼ ¼³Á¤ÇÕ´Ï´Ù. newwork_001->setProperty(WSNvalue,cnt); //¼ýÀÚ °ªÀÌ 100À» ³Ñ±ä °æ¿ì, ´ëÈ »óÀÚ¸¦ ºñÇ¥½Ã »óÅ·ΠÀüȯÇϰí, //󸮸¦ ³¡¸¶Ä¨´Ï´Ù. if (cnt>100){ newwork_001->setVisible(False); } } static WSCfunctionRegister op("act_ep",(void*)act_ep);¹ü¿ë ¾²·¹µå Ŭ·¡½º¿Í ÁøÃ´ ´ëÈ »óÀÚ¿¡ ÀÇÇÏ´Â Àå½Ã°£ 󸮸¦ ½ÇÇàÇϱâ
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++; //¼ýÀÚ °ªÀ» ÁøÃ´ ´ëÈ »óÀÚ¿¡ Ç¥½ÃÇϱ⸦ À§Çؼ, //ºÎ¸ð ¾²·¹µåÀ§¿¡¼ ÇÁ·Î½ÃÀú¸¦ ½ÇÇàÇÕ´Ï´Ù. obj->execCallback((void*)cnt); //¿©±â¼ Àå½Ã°£ °É¸®´Â 󸮸¦ ©¸·ÇÏ°Ô ³ª´©¾î¼ Á¶±Ý¾¿ ½ÇÇàÈü´Ï´Ù. #ifdef MSW Sleep(1000); #else sleep(1); #endif //¼ýÀÚ °ªÀÌ 100À» ³Ñ±ä °æ¿ì, 󸮸¦ ³¡³À´Ï´Ù. if (cnt == 100){ return NULL; } } return NULL; } //¼ýÀÚ °ªÀ» ÁøÃ´ ´ëÈ »óÀÚ¿¡ ¹Ý¿µ½Ã۱⸦ À§ÇÏ´Â ÇÁ·Î½ÃÀú //WSDthread::execCallback() ¸Þ¼µå¿¡ ÀÇÇØ¼ ºÎ¸ð ¾²·¹µå¿¡¼ ½ÇÇàµÈ´Ù. void callback_func(WSDthread*,void* val){ long cnt = (long)val; //¼ýÀÚ °ªÀ» ÁøÃ´ ´ëÈ »óÀÚ¿¡ ¹Ý¿µ newwork_000->setProperty(WSNvalue,cnt); if (cnt == 100){ newwork_000->setVisible(False); } } //¹öư Ŭ¸¯¿¡ ÀÇÇØ¼, ÁøÃ´ ´ëÈ »óÀÚ¸¦ Ç¥½ÃÇϰí, 󸮸¦ ½ÃÀÛ. void btnop(WSCbase* object){ if (thr == NULL){ //¾²·¹µå ÀνºÅϽº¸¦ »ý¼º. thr = WSDthread::getNewInstance(); //ÀÚ½Ä ¾²·¹µå·Î¼ ½ÇÇàÇÏ´Â ÇÁ·Î½ÃÀú¸¦ ¼³Á¤. thr->setFunction(thread_func); //ÀÚ½Ä ¾²·¹µå¿¡¼ È£ÃâµÇ´Â //ºÎ¸ð ¾²·¹µå¿¡¼ ½ÇÇàµÇ´Â Äݹé ÇÁ·Î½ÃÀú¸¦ ¼³Á¤. thr->setCallbackFunction(callback_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++; //¼ýÀÚ °ªÀ» ÁøÃ´ ´ëÈ »óÀÚ¿¡ Ç¥½ÃÇϱ⸦ À§Çؼ, //ºÎ¸ð ¾²·¹µåÀ§¿¡¼ ÇÁ·Î½ÃÀú¸¦ ½ÇÇàÇÕ´Ï´Ù. obj->execCallback((void*)cnt); //¿©±â¼ Àå½Ã°£ °É¸®´Â 󸮸¦ ©¸·ÇÏ°Ô ³ª´©¾î¼ Á¶±Ý¾¿ ½ÇÇàÈü´Ï´Ù. #ifdef MSW Sleep(1000); #else sleep(1); #endif //¼ýÀÚ °ªÀÌ 100À» ³Ñ±ä °æ¿ì, 󸮸¦ ³¡³À´Ï´Ù. if (cnt == 100){ return NULL; } //ÇÁ·¡±×(flag)¸¦ ÂüÁ¶Çϰí, 󸮸¦ ÁßÁöÇØ¾ß Çϴ°¡¸¦ ÆÇ´ÜÇÕ´Ï´Ù. if (canceled != False){ return NULL; } } return NULL; } //¼ýÀÚ °ªÀ» ÁøÃ´ ´ëÈ »óÀÚ¿¡ ¹Ý¿µ½Ã۱⸦ À§ÇÏ´Â ÇÁ·Î½ÃÀú //WSDthread::execCallback() ¸Þ¼µå¿¡ ÀÇÇØ¼ ºÎ¸ð ¾²·¹µå¿¡¼ ½ÇÇàµÈ´Ù. void callback_func(WSDthread*,void* val){ long cnt = (long)val; //¼ýÀÚ °ªÀ» ÁøÃ´ ´ëÈ »óÀÚ¿¡ ¹Ý¿µ. newwork_000->setProperty(WSNvalue,cnt); if (cnt == 100){ newwork_000->setVisible(False); } } //¹öư Ŭ¸¯¿¡ ÀÇÇØ¼, ÁøÃ´ ´ëÈ »óÀÚ¸¦ Ç¥½ÃÇϰí, 󸮸¦ ½ÃÀÛ. void btnop(WSCbase* object){ if (thr == NULL){ //¾²·¹µå ÀνºÅϽº¸¦ »ý¼º. thr = WSDthread::getNewInstance(); //ÀÚ½Ä ¾²·¹µå·Î¼ ½ÇÇàÇÏ´Â ÇÁ·Î½ÃÀú¸¦ ¼³Á¤. thr->setFunction(thread_func); //ÀÚ½Ä ¾²·¹µå¿¡¼ È£ÃâµÇ´Â //ºÎ¸ð ¾²·¹µå¿¡¼ ½ÇÇàµÇ´Â Äݹé ÇÁ·Î½ÃÀú¸¦ ¼³Á¤. thr->setCallbackFunction(callback_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 |