WideStudio/MWT Logo
WideStudio/MWT
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);


Document Release 3.90 for WideStudio/MWT ver 3.90, Jul 2005


WideStudio/MWT documents index | Table of contents

Copyright(C) WideStudio/MWT Development Team, 1999-2005 Last modified: Jul 31, 2005