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


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