ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ´Â µ¿¾È Áö¼ÓÀûÀ¸·Î ¼öÇàÇØ¾ß ÇÒ ÀÛ¾÷ÀÌ ÀÖ´Ù°í ÇØ º¸ÀÚ. ¿¹¸¦ µé¾î ·Î°í ¾Ö´Ï¸ÞÀ̼ÇÀ̳ª ¹é±×¶ó¿îµå À½¾Ç ¿¬ÁÖ µîÀ» µé ¼ö Àִµ¥ µµ½º¿¡¼¶ó¸é ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÛ¼ºÇÒ °ÍÀÌ´Ù. for(;;) { Áö¼ÓÀûÀÎ ÀÛ¾÷ ±âŸ ÀÛ¾÷ } ¹«ÇÑ ·çÇÁ°¡ Àüü ÇÁ·Î±×·¥ Äڵ带 °¨½Î°í ÀÖ°í ÀÌ ·çÇÁ ¾È¿¡¼ Áö¼ÓÀûÀ¸·Î ÇؾßÇÒ ÀÛ¾÷°ú ±×¿Ü ÀÛ¾÷À» ¼öÇàÇÏ°í ÀÖ´Ù. µµ½º¿¡¼´Â ÀÌ·±½ÄÀ¸·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ °¡´ÉÇÏ¸ç ½ÇÁ¦·Î ÀÌ·¸°Ô ÇÑ´Ù. ±×·¯³ª À©µµ¿ìÁî¿Í °°Àº ¸ÖƼ ŽºÅ· ȯ°æ¿¡¼´Â ÀÌ·± ¹æ½ÄÀ» »ç¿ëÇؼ´Â ¾ÈµÈ´Ù. ¿Ö³ÄÇϸé ÇÑ ÇÁ·Î±×·¥ÀÌ Á¦¾î±ÇÀ» µ¶Á¡ÇÏ°í À־ ¾ÈµÇ¸ç ´Ù¸¥ ÇÁ·Î±×·¥µµ ½ÇÇà½Ã°£À» °¡Á®¾ß Çϱ⠶§¹®ÀÌ´Ù. »ç¿ëÀÚ´Â ¼ö½Ã·Î ÀÛ¾÷ ÀüȯÀ» ÇÒ ¼ö ÀÖ¾î¾ß Çϴµ¥ ÇÑ ÇÁ·Î±×·¥ÀÌ CPU¸¦ µ¶Â÷ÁöÇÏ°í ÀÖÀ¸¸é ¾ÈµÈ´Ù. ±×·¡¼ CPU¸¦ µ¶Á¡ÇÏ´Â ÀÌ·± ¹«ÇÑ·çÇÁ¸¦ ÀÛ¼ºÇؼ´Â ¾ÈµÇ¸ç ¹Ýµå½Ã ¸Þ½ÃÁö°¡ Àü´ÞµÇ¾úÀ» ¶§¿¡ ÇÑÇØ ÇÊ¿äÇÑ ÀÛ¾÷À» Çϵµ·Ï ÇØ¾ß ÇÑ´Ù. ÀÌ·² ¶§ »ç¿ëÇÏ´Â ¸Þ½ÃÁö°¡ ¹Ù·Î ŸÀÌ¸Ó ¸Þ½ÃÁöÀε¥ Àá½Ã ÈÄ¿¡ ¿¹Á¦¸¦ ¸¸µé¾î º¼ °ÍÀÌ´Ù. ¿¹Á¦¸¦ ¸¸µé±â Àü¿¡ Àá±ñ SetTimerÀÇ ³×¹ø° Àμö¿¡ ´ëÇØ ¾Ë¾Æº¸ÀÚ. ³×¹ø° Àμö´Â TIMERPROC lpTimerFunc¶ó°í µÇ¾î Àִµ¥ ÀÌ Àμö´Â ŸÀÌ¸Ó ÇÁ·Î½ÃÀú ÇÔ¼öÀÇ Æ÷ÀÎÅ͸¦ °¡¸®Å²´Ù. ÀÌ Àμö°¡ NULL·Î µÇ¾î ÀÖÀ» °æ¿ì ù¹ø° Àμö·Î ÁöÁ¤µÈ hWnd·Î WM_TIMER ¸Þ½ÃÁö°¡ Àü´ÞµÇÁö¸¸ ÀÌ Àμö¿¡ ŸÀÌ¸Ó ÇÔ¼ö°¡ ÁöÁ¤µÇ¾úÀ» °æ¿ì´Â ¸Å ½Ã°£¸¶´Ù ÀÌ ÇÔ¼ö°¡ ´ë½Å È£ÃâµÈ´Ù. Áï ŸÀÌ¸Ó ÇÔ¼ö°¡ ÁöÁ¤µÇ¸é ¸Þ½ÃÁö ´ë½Å ÇÔ¼ö¸¦ È£ÃâÇØ ÁØ´Ù. ŸÀÌ¸Ó ÇÔ¼ö´Â ´ÙÀ½°ú °°Àº ¿øÇüÀ¸·Î ÀÛ¼ºµÇ¾î¾ß ÇÑ´Ù. VOID CALLBACK TimerProc( HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime );4°³ÀÇ Àμö¸¦ °¡Áö´Âµ¥ hWnd´Â ŸÀ̸Ӹ¦ ¼ÒÀ¯ÇÑ À©µµ¿ìÀÇ ÇÚµéÀ̸ç uMsg´Â WM_TIMER, idEvent´Â ŸÀÌ¸Ó ID, dwTimeÀº À©µµ¿ìÁî°¡ ½ÇÇàµÈ ÈÄÀÇ °æ°ú½Ã°£ÀÌ´Ù. ÀÌ ÇÔ¼öÀÇ Àμö´Â Àß »ç¿ëµÇÁö ¾ÊÀ¸¹Ç·Î ±¸Ã¼ÀûÀ¸·Î ¾Ë ÇÊ¿ä´Â ¾ø´Ù. ¾Æ¹¸µç Áß¿äÇÑ »ç½ÇÀº ÀÌ·± ¿øÇüÀ» °¡Áö´Â ÇÔ¼ö¸¦ ¸¸µç ÈÄ SetTimer ÇÔ¼öÀÇ ³×¹ø° Àμö¿¡ ÀÌ ÇÔ¼ö¸íÀ» Àû¾îÁÖ¸é ÁöÁ¤ÇÑ ½Ã°£ °£°ÝÀ¸·Î ÀÌ ÇÔ¼ö°¡ È£ÃâµÈ´Ù´Â Á¡ÀÌ´Ù. ±×·³ ÀÌÁ¦ Äݹé ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ȸéÀÇ ÀÓÀÇ À§Ä¡¿¡ Áö¼ÓÀûÀ¸·Î Á¡À» Âï´Â ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇÏÀÚ. RandGrp ÇÁ·ÎÁ§Æ®¸¦ ¸¸µé°í ´ÙÀ½°ú °°ÀÌ Äڵ带 ÀÛ¼ºÇÑ´Ù.
WndProc¿¡¼´Â ÇÁ·Î±×·¥ ½ÃÀÛ½Ã(WM_CREATE)¿¡ ŸÀ̸Ӹ¦ ¼³Ä¡ÇÏ´Â ÀÏ°ú ÇÁ·Î±×·¥ Á¾·á Á÷Àü(WM_DESTROY)¿¡ ŸÀ̸Ӹ¦ ÇØÁ¦ÇÏ´Â ÀÛ¾÷¸¸ ÇÑ´Ù. SetTimer ÇÔ¼ö¿¡¼ °£°ÝÀº 0.1ÃÊ·Î ÁöÁ¤µÇ¾ú°í ³×¹ø° Àμö´Â TimerProc¶õ ÇÔ¼ö·Î ÁöÁ¤µÇ¾î ÀÖÀ¸¹Ç·Î 0.1ÃÊ °£°ÝÀ¸·Î TimerProc¶ó´Â ÇÔ¼ö°¡ È£ÃâµÉ °ÍÀÌ´Ù. TimerProc ÇÔ¼ö´Â WndProc ¹Ù·Î ¾Õ¿¡ ÀÛ¼ºµÇ¾î ÀÖÀ¸¸ç 300°³ÀÇ Á¡À» ³¼ö·Î ¾òÀº ÀÓÀÇ ÁÂÇ¥¿¡ ÀÓÀÇÀÇ »ö»óÀ¸·Î Ãâ·ÂÇÏ´Â ÀÏÀ» ÇÑ´Ù. ÀÓÀÇÀÇ »ö»óÀ» ¸¸µé ¶§´Â RGB ¸ÅÅ©·Î ÇÔ¼ö¸¦ »ç¿ëÇϴµ¥ ÀÌ ÇÔ¼ö´Â 6Àå¿¡¼ ÀÚ¼¼È÷ ¾Ë¾Æº¼ °ÍÀÌ´Ù. °á±¹ 1ÃÊ¿¡ 3000°³ÀÇ Á¡ÀÌ ¹«ÀÛÀ§·Î Ãâ·ÂµÇ´Â ¼ÀÀÌ´Ù. ½ÇÇàÁßÀÇ ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù. ÀÌ ÇÁ·Î±×·¥ÀÌ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö´Â ½±°Ô ÀÌÇØ°¡ °¥ °ÍÀÌ´Ù. ±×·±µ¥ ¿Ö ÀÌ·± ÀÛ¾÷À» Çϴµ¥ ´ÙÀ½°ú °°ÀÌ ÇÏ¸é ¾ÈµÉ±î? case WM_PAINT: hdc=BeginPaint(hWnd, &ps); for (;;) { SetPixel(hdc,rand()%500, rand()%400, RGB(rand()%256,rand()%256,rand()%256,)); } EndPaint(hWnd, &ps); return 0; WM_PAINT¿¡¼ ¹«Çѹø Á¡À» ÂïÀ¸¸é °á°ú´Â °°Áö ¾ÊÀ»±î? ¸¸¾à ÀÌ·± Àǹ®À» °¡Áö°í ÀÖ´Ù¸é Á÷Á¢ Äڵ带 ÀÛ¼ºÇØ ³Ö¾î º¸°í ½ÇÇàÇØ º¸¸é ¿Ö ¾ÈµÇ´ÂÁö¸¦ ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. Á¡ÀÌ ¹«ÀÛÀ§·Î ÂïÈ÷±â´Â ÇϹǷΠ¸ñÀûÀº ´Þ¼ºµÇ°ÚÁö¸¸ ±× ¿Ü ¾î¶°ÇÑ µ¿ÀÛµµ ÇÒ ¼ö ¾ø´Ù. ŸÀÌƲ ¹Ù¸¦ µå·¡±×ÇÏ¿© À§Ä¡¸¦ ¿Å±æ ¼öµµ ¾øÀ¸¸ç Å©±â º¯°æµµ µÇÁö ¾Ê°í ½Ã½ºÅÛ ¸Þ´º¸¦ ´·¯µµ ¸Þ´º°¡ ³ªÅ¸³ªÁö ¾Ê´Â´Ù. ´õ±¸³ª ½É°¢ÇÑ °ÍÀº Á¾·á ¹öÆ°À» ´·¯µµ Á¾·áÁ¶Â÷µµ µÇÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. ¿Ö³ÄÇϸé WM_PAINT ¸Þ½ÃÁö ó¸® ±¸°£¿¡¼ ¹«ÇÑ·çÇÁ¿¡ ºüÁ® µé¾ú±â ¶§¹®¿¡ ¾î¶² ´Ù¸¥ ¸Þ½ÃÁöµµ ¹ÞÀ» ¼ö ¾ø´Â »óÅ°¡ µÇ¾ú±â ¶§¹®ÀÌ´Ù. ´ÙÇàÈ÷ Win95´Â ¼±Á¡Çü ¸ÖƼ ŽºÅ· ȯ°æÀ̱⠶§¹®¿¡ ´Ù¸¥ ÀÛ¾÷À¸·Î ÀüȯÇÒ ¼ö ÀÖÀ¸¸ç ÃÖÈÄÀÇ ¼ö´ÜÀ¸·Î Ctrl-Alt-Del Å°¸¦ ´·¯ ÀÌ ÇÁ·Î±×·¥À» °Á¦ Á¾·á½Ãų ¼ö ÀÖ´Ù. ¸¸¾à À©µµ¿ìÁî 3.1¿¡¼ ÀÌ·± Äڵ带 ÀÛ¼ºÇß´Ù¸é ÀÌ´Â °ð Çѹ濡 ½Ã½ºÅÛÀ» ´Ù¿î½ÃÄÑ ¹ö¸®´Â Äڵ尡 µÈ´Ù. ±×·¡¼ ÀÌ·± Áö¼ÓÀûÀ¸·Î ÇØ¾ß ÇÒ ÀÛ¾÷Àº ŸÀ̸Ӹ¦ ¼³Ä¡ÇÑ ÈÄ Å¸ÀÌ¸Ó ¸Þ½ÃÁö¸¦ ¹ÞÀ» ¶§¸¶´Ù Âñ²û Âñ²û ³ª´©¾î ÇØ¾ß ÇÏ´Â °ÍÀÌ´Ù. À§ ¿¹Á¦´Â Äݹé ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¹®Á¦¸¦ ÇØ°áÇߴµ¥ WM_TIMER ¸Þ½ÃÁö¸¦ »ç¿ëÇصµ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù. Â÷ÀÌÁ¡À̶ó¸é WM_TIMER ¸Þ½ÃÁö´Â ´Ù¸¥ ¸Þ½ÃÁö°¡ ÀÖÀ» °æ¿ì ½ÇÇà ¼ø¼¿¡ ¹Ð·Á ´Ê°Ô È£ÃâµÇ´Â °æ¿ì°¡ ÀÖÁö¸¸ Äݹé ÇÔ¼ö¸¦ »ç¿ëÇϸé Á¤È®ÇÑ ½Ã°£¿¡ È£ÃâµÈ´Ù´Â Á¡ÀÌ´Ù. ±×·¡¼ Á¤È®µµ¸¦ ¿äÇÏ´Â ÀÛ¾÷Àº ŸÀÌ¸Ó ¸Þ½ÃÁöº¸´Ù´Â Äݹé ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀÌ ´õ ÁÁ´Ù. ±×·¸´Ù¸é Äݹé ÇÔ¼ö(Callback Function)¶õ ¹«¾ùÀÎÁö ±× Àǹ̸¦ Á» ´õ Á¤È®ÇÏ°Ô ¾Ë¾Æº¸ÀÚ. ÀϹÝÀûÀ¸·Î API ÇÔ¼öµéÀº ¿î¿µÃ¼Á¦°¡ Á¦°øÇϸç ÇÁ·Î±×·¥¿¡¼´Â ÀÌ ÇÔ¼öµéÀ» È£ÃâÇؼ ¿î¿µÃ¼Á¦ÀÇ ¼ºñ½º¸¦ ¹Þ´Â´Ù. ¿¹¸¦ µé¾î µµ½ºÀÇ ½Ã½ºÅÛ ÄÝ ÇÔ¼ö¸¦ È£ÃâÇÏ¿© µð½ºÅ© ÀÔÃâ·ÂÀ» ¹Þ´Â´Ùµç°¡ À©µµ¿ìÁîÀÇ TextOut ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¹®ÀÚ¿À» Ãâ·ÂÇϵµ·Ï ÇÏ´Â °æ¿ì°¡ ÀÌ¿¡ ÇØ´çÇÑ´Ù. ¹Ý¸é Äݹé ÇÔ¼ö´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Á¦°øÇÏ¸ç ¿î¿µÃ¼Á¦°¡ ÇÊ¿äÇÒ ¶§ È£ÃâÇÏ´Â ÇÔ¼öÀÌ´Ù. È£ÃâµÇ´Â ¹æÇâÀÌ °Å²Ù·Î µÇ¾ú±â ¶§¹®¿¡ ÄݹéÀ̶ó°í ºÎ¸£´Â °ÍÀÌ´Ù. À§ ¿¹Á¦¿¡¼ TimerProc ÇÔ¼ö´Â SetTimer¿¡¼ ÁöÁ¤ÇÑ ½Ã°£¸¶´Ù ¿î¿µÃ¼Á¦¿¡ ÀÇÇØ È£ÃâµÈ´Ù. Äݹé ÇÔ¼ö¸¦ ¹®ÀåÈÇÏ¿© Á¤Àdz»¸°´Ù¸é "¿î¿µÃ¼Á¦¿¡ ÀÇÇØ È£ÃâµÇ´Â ÇÁ·Î±×·¥ ³»ºÎÀÇ ÇÔ¼ö"¶ó°í ÇÒ ¼ö ÀÖ´Ù. À©µµ¿ìÁî¿¡¼´Â ÀÌ·± Äݹé ÇÔ¼ö°¡ ºó¹øÇÏ°Ô »ç¿ëµÇ°í ÀÖÀ¸¹Ç·Î °³³äÀ» Àß ¾Ë¾ÆµÎµµ·Ï ÇÏÀÚ. ŸÀ̸ÓÀÇ Äݹé ÇÔ¼ö°¡ ´ëÇ¥ÀûÀ̸ç ÀÌ ¿Ü¿¡µµ Áß¿äÇÑ ¿°Å ÇÔ¼öµé°ú ¸î¸î ±×·¡ÇÈ ÇÔ¼ö µîÀÇ Äݹé ÇÔ¼ö¸¦ »ç¿ëÇÑ´Ù. ±×º¸´Ùµµ °¡Àå °¡±î¿î Äݹé ÇÔ¼öÀÇ ¿¹´Â ¸Þ½ÃÁö ó¸® ÇÔ¼öÀÎ WndProcÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ¸Þ½ÃÁö°¡ ¹ß»ýÇÒ ¶§¸¶´Ù À©µµ¿ìÁî°¡ È£ÃâÇØ ÁÖ¸ç ÀÀ¿ë ÇÁ·Î±×·¥ ³»ºÎ¿¡ ÀÖÁö¸¸ ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼ Á÷Á¢ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÏÁö´Â ¾Ê´Â´Ù. ¿ÀÁ÷ ¿î¿µÃ¼Á¦¸¸ÀÌ ÀÌ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. |