프로그래밍을 하다보면 동기/비동기라는 말이 자주 등장합니다. 동기 방식이란 해당 I/O 작업이 완료될 때까지 프로그램이 블록된다는 것을 의미합니다. 소켓 통신에서 수신을 한다면 데이터가 올 때까지 프로그램이 정지한다는 말이죠. 키보드 입력을 받는다면 사용자가 키보드에서 데이터를 입력할 때까지 프로그램이 정지하는 겁니다. 그렇다면 비동기는 어떻게 동작하는 것일까요? 동기 방식과 정반대로 동작하는 것을 말합니다. I/O가 완료되지 않아도 바로 리턴하며, I/O가 완료됐을 때 이벤트를 받는 형태로 동작하는 방식입니다. 따라서 프로그램은 계속 다른 작업을 할 수 있다는 장점이 있습니다.
… 작성 중 (나용 추가 필요) …
아래 프로그램은 지속적으로 “Happy New Year!!!”을 출력하다가 사용자가 q를 누르면 종료하는 프로그램입니다. _kbhit 함수는 사용자가 키보드를 입력했는지 하지 않았는지를 검사하는 함수 입니다. 키보드를 입력했으면 0이 아닌 값을, 입력하지 않았다면 0을 리턴하죠. getch는 키보드 입력 버퍼에서 한 글자를 입력 받아서 해당 키 값을 리턴해 주는 함수입니다.
#include <stdio.h>
#include <tchar.h>
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
for(;;)
{
if(_kbhit() && getch() == 'q')
break;
printf("Happy New Year!!!\n");
}
return 0;
}
아래 프로그램과 동작을 비교해 보시면 어떤 차이가 있는지 금방 알 수 있습니다.
#include <stdio.h>
#include <tchar.h>
#include <conio.h>
int _tmain(int argc, _TCHAR* argv[])
{
for(;;)
{
if(getch() == 'q')
break;
printf("Happy New Year!!!\n");
}
return 0;
}