ÁøÇà º¸°í

Àå±â ½ÇÇà ÁßÀÎ ÀÛ¾÷(2ÃÊ ÀÌ»óÀÇ Áö¼ÓÀûÀÎ ÀÛ¾÷)Àº ÀÛ¾÷ÀÇ run ¸Þ¼Òµå¿¡ Àü´ÞµÇ´Â IProgressMonitor¿¡ ÁøÇà »óŸ¦ º¸°íÇØ¾ß ÇÕ´Ï´Ù. Workbench ÁøÇà º¸±â´Â ÁöÁ¤µÈ ¿Ï·á ÀÛ¾÷ ´ÜÀ§ ¹× ¸ðµç ÁøÇà ¸Þ½ÃÁö¸¦ ÀÌ ¸ð´ÏÅÍ¿¡ Ç¥½ÃÇÕ´Ï´Ù.

¶ÇÇÑ Á¦°øµÈ ÁøÇà ¸ð´ÏÅÍ´Â ÁøÇà º¸±â¿¡¼­ ÀÛ¼ºµÈ Ãë¼Ò ¿äûÀÌ ÀÖ´ÂÁö¸¦ È®ÀÎÇÏ´Â µ¥¿¡µµ »ç¿ëµË´Ï´Ù. »ç¿ëÀÚ(¶Ç´Â ÀÛ¾÷ API¸¦ »ç¿ëÇÏ´Â Ç÷¯±×ÀÎ)°¡ ÀÛ¾÷À» Ãë¼ÒÇÏ·Á°í ½ÃµµÇÒ ¶§ IProgressMonitor ¸Þ¼Òµå isCanceled()´Â true¸¦ ¸®ÅÏÇÕ´Ï´Ù. ÀÛ¾÷Àº ÀÛ¾÷ÀÇ Ãë¼Ò »óŸ¦ ¼ö½Ã·Î È®ÀÎÇϰí Ãë¼Ò¸¦ ¹ß°ßÇϸé Áï½Ã run ¸Þ¼Òµå¸¦ Á¾·áÇÏ¿© Ãë¼Ò¿¡ ÀÀ´äÇØ¾ß ÇÕ´Ï´Ù. ´ÙÀ½ run ¸Þ¼Òµå´Â ÁøÇà »óŸ¦ º¸°íÇϰí ÀÛ¾÷ Ãë¼Ò¿¡ ÀÀ´äÇÕ´Ï´Ù.

            public IStatus run(IProgressMonitor monitor) {
final int ticks = 6000;monitor.beginTask("Doing some work", ticks);         try {
for (int i = 0; i < ticks; i++) {if (monitor.isCanceled())return Status.CANCEL_STATUS;monitor.subTask("Processing tick #" + i);//... do some work ...monitor.worked(1);         }
        } finally {
monitor.done();      }
return Status.OK_STATUS;
}

beginTask ¸Þ¼Òµå´Â ÇØ´ç ÁøÇà º¸±âÀÇ Å¸½ºÅ© À̸§À» ÁöÁ¤ÇÏ°í º¸±â°¡ ÁøÇà »óŸ¦ °è»êÇÒ ¼ö ÀÖµµ·Ï ¼öÇàÇÒ ÃÑ ÀÛ¾÷·®À» ¼³Á¤ÇÏ´Â µ¥ »ç¿ëµË´Ï´Ù. subTask ¸Þ½ÃÁö´Â ÀÛ¾÷ÀÌ ¼öÇàµÇ¸é ÁøÇà Æ®¸®¿¡¼­ ÇÏÀ§·Î Ç¥½ÃµË´Ï´Ù. ÁøÇà º¸±â´Â ÀÛ¾÷ÀÌ ¿Ï·áµÈ È£Ãâ¿¡¼­ º¸°íÇÏ´Â ÀÛ¾÷·®À» ±âÃÊ·Î ¿Ï·áÀ²À» °è»êÇÏ¿© Ç¥½ÃÇÕ´Ï´Ù.

ÁøÇà ¸ð´ÏÅÍ ¹× UI

º¸´Â ¹Ù¿Í °°ÀÌ IProgressMonitor Ŭ·¡½º´Â ÇØ´ç UI Áö¿øÀ» °í·ÁÇÏ¿© ¼³°èµË´Ï´Ù. Ç÷§ÆûÀÇ UI Ç÷¯±×ÀÎÀº Workbench°¡ ½ÇÇà ÁßÀÎ ÀÛ¾÷ÀÇ ÁøÇà »óŸ¦ Ç¥½ÃÇÒ ¼ö ÀÖµµ·Ï Áö¿øÀ» Á¦°øÇÕ´Ï´Ù. ÀÛ¾÷À» Ç¥½ÃÇÏ´Â ¹æ¹ýÀ» Á¦¾îÇÒ ¼ö ÀÖµµ·Ï ÀÌ »çÇ×À» °í·ÁÇÏ¿© ÀÛ¾÷À» ¼³Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù.

ÀÛ¾÷ÀÇ ÁøÇà »óŸ¦ Ç¥½ÃÇÏ´Â µ¥ »ç¿ëÇÒ ¼ö ÀÖ´Â API¸¦ ÀÚ¼¼È÷ »ìÆì º¸·Á¸é Workbench µ¿½Ã¼º Áö¿øÀ» ÂüÁ¶ÇϽʽÿÀ.

½Ã½ºÅÛ ÀÛ¾÷

ÀÛ¾÷ÀÌ »ç¿ëÀÚ¿¡°Ô Ç¥½ÃÇÏÁö ¾ÊÀ¸·Á´Â ÇÏÀ§ ·¹º§ ±¸Çö ¼¼ºÎ»çÇ×ÀÏ °æ¿ì¿¡´Â ¾î¶»°Ô ÇϽðڽÀ´Ï±î? ÀÛ¾÷À» ½Ã½ºÅÛ ÀÛ¾÷À¸·Î Ç÷¡±×ÇÒ ¼ö ÀÖ½À´Ï´Ù. ½Ã½ºÅÛ ÀÛ¾÷Àº ÇØ´ç UI Áö¿øÀÌ ÁøÇà º¸±â¸¦ ¼³Á¤ÇÏÁö ¾Ê°Å³ª ÀÛ¾÷ ½ÇÇà°ú ¿¬°üµÈ ´Ù¸¥ ¸ðµç UI Á¦°ø¼ºÀ» Ç¥½ÃÇÏ´Â °ÍÀ» Á¦¿ÜÇϰí´Â ´Ù¸¥ ¸ðµç ÀÛ¾÷°ú °°½À´Ï´Ù. ÀÛ¾÷ÀÌ »ç¿ëÀÚ Á÷Á¢ ¶Ç´Â »ç¿ëÀÚ°¡ ±¸¼ºÇÒ ¼ö ÀÖ´Â ÁÖ±âÀûÀΠŸ½ºÅ©¿¡ ÀÇÇØ ½ÃÀÛµÇÁö ¾ÊÀ» °æ¿ì ÀÛ¾÷Àº ½Ã½ºÅÛ ÀÛ¾÷ÀÔ´Ï´Ù. ½Ã½ºÅÛ ÀÛ¾÷À» ¼³Á¤ÇÏ´Â ÇÁ·ÎÅäÄÝÀº ´ÙÀ½°ú °°ÀÌ ´Ü¼øÇÕ´Ï´Ù.

      class TrivialJob extends Job {
      public TrivialJob() {
         super("Trivial Job");
         setSystem(true);
      }
      ...
   }

setSystem È£ÃâÀº ÀÛ¾÷ÀÌ ½ºÄÉÁٵDZâ Àü¿¡ ¼öÇàµÇ¾î¾ß ÇÕ´Ï´Ù. ÇöÀç ´ë±â ÁßÀ̰ųª ÀϽà Á¤Áö Áß ¶Ç´Â ½ÇÇà ÁßÀÎ ÀÛ¾÷¿¡¼­ ÀÌ È£ÃâÀ» ½ÃµµÇÒ °æ¿ì ¿¹¿Ü°¡ Æ®¸®°ÅµË´Ï´Ù.

»ç¿ëÀÚ ÀÛ¾÷

ÀÛ¾÷ÀÌ »ç¿ëÀÚ°¡ ½ÃÀÛÇÏ´Â Àå±â ½ÇÇà ÁßÀÎ Á¶ÀÛÀÏ °æ¿ì ÀÛ¾÷À» »ç¿ëÀÚ ÀÛ¾÷À¸·Î Ç÷¡±×ÇØ¾ß ÇÕ´Ï´Ù. »ç¿ëÀÚ ÀÛ¾÷Àº ´ëÈ­ »óÀÚ¸¦ ¹è°æÀ¸·Î À̵¿½ÃŰ´Â ´ÜÃ߸¦ Á¦°øÇÏ´Â ¸ð´Þ(modal) ÁøÇà ´ëÈ­ »óÀÚ¿¡ Ç¥½ÃµË´Ï´Ù. Workbench´Â ÀÌ·¯ÇÑ ´ëÈ­ »óÀÚ°¡ ¸ðµ¨ ¿©ºÎ¸¦ Á¦¾îÇÏ´Â »ç¿ëÀÚ È¯°æ ¼³Á¤À» Á¤ÀÇÇÕ´Ï´Ù. ÀÛ¾÷À» »ç¿ëÀÚ ÀÛ¾÷À¸·Î Á¤ÀÇÇϸé ÁøÇà Çǵå¹éÀº ÁøÇà º¸±âÀÇ »ç¿ëÀÚ È¯°æ ¼³Á¤À» ÀÚµ¿À¸·Î ÁؼöÇÕ´Ï´Ù. »ç¿ëÀÚ ÀÛ¾÷À» ¼³Á¤ÇÏ´Â ÇÁ·ÎÅäÄÝÀº ´ÙÀ½°ú À¯»çÇÕ´Ï´Ù.

      class TrivialJob extends Job {
      public TrivialJob() {
         super("Trivial Job");
         setUser(true);
      }
      ...
   }

¶ÇÇÑ setUser È£ÃâÀº ÀÛ¾÷ÀÌ ½ºÄÉÁٵDZâ Àü¿¡ ¼öÇàµÇ¾î¾ß ÇÕ´Ï´Ù.

ÁøÇà ±×·ì

ÁøÇà ±×·ìÀº ÀÛ¾÷ÀÌ UI¿¡ Ç¥½ÃµÇ´Â ¹æ½Ä¿¡ ¿µÇâÀ» ÁÖ´Â µ¥ »ç¿ëµÉ ¼ö ÀÖ´Â ¶Ç ´Ù¸¥ ¸ÞÄ¿´ÏÁòÀÔ´Ï´Ù. UI¿¡ ¿©·¯ °ü·Ã ÀÛ¾÷¿¡ ´ëÇÑ ÃÑ ÁøÇà »óŸ¦ Ç¥½ÃÇÏ´Â °ÍÀÌ ´õ ÀûÀýÇÒ °æ¿ì °ü·Ã ÀÛ¾÷ ±×·ìÀ» Ç¥½ÃÇϴ Ư¼ö IProgressMonitor¸¦ ÀÛ¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¸ð´ÏÅÍ´Â IJobManager ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ¿© ÀÛ¼ºµË´Ï´Ù. ´ÙÀ½ ½º´ÏÆêÀº ÁøÇà ±×·ìÀ» ÀÛ¼ºÇϰí ÀÌ ±×·ìÀ» ÀÛ¾÷°ú ¿¬°ü½ÃŰ´Â ¹æ¹ýÀ» º¸¿©ÁÝ´Ï´Ù.

   ...
   IJobManager jobMan = Platform.getJobManager();
myGroup = jobMan.createProgressGroup();job.setProgressGroup(myGroup, 600);  // specify the units of work the job needs to show.job.schedule()   ...

±×·ì ±â´ÉÀ» »ç¿ëÇϸé Çʿ信 µû¶ó Ç÷¯±×ÀÎÀÌ Å¸½ºÅ©¸¦ ´ÙÁß ÀÛ¾÷À¸·Î ±¸ºÐÇÒ ¼ö ÀÖÁö¸¸ Ÿ½ºÅ©°¡ ´ÜÀÏ Å¸½ºÅ©ÀÎ °Íó·³ »ç¿ëÀÚ¿¡°Ô º¸°íÇÒ ¼ö ÀÖ½À´Ï´Ù. ÁøÇà ±×·ì ¸ð´ÏÅÍ´Â ±×·ìÀÇ ¸ðµç ÀÛ¾÷°ú °ü·ÃµÈ ¿Ï·áÀ²À» °è»êÇÏ´Â ¼¼ºÎ»çÇ×À» ó¸®ÇÕ´Ï´Ù.

ÀÛ¾÷Àº ½ºÄÉÁٵDZâ Àü¿¡ ÁøÇà ±×·ì¿¡ ¹èÄ¡µÇ¾î¾ß ÇÕ´Ï´Ù. ÀÛ¾÷ÀÌ ½ÇÇàÀ» ¿Ï·áÇÑ ÈÄ¿¡´Â ÁøÇà ±×·ì¿¡ ´ëÇÑ ÂüÁ¶°¡ ¼Õ½ÇµË´Ï´Ù. ÀÛ¾÷ÀÌ À罺ÄÉÁÙµÉ °æ¿ì ½ºÄÉÁٵDZâ Àü¿¡ ´Ù½Ã Çѹø ±×·ì¿¡ ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù.