반응형

c를 어느정도 하다보면 멀티태스킹을 console에서 할 수 없다는 것을 알게 될 것이다.

 

예를 들자면 타이머를 만들어서 게임을 플레이하는도중에 시간이 동시에 흐르도록 하려고 한다면 두개를 동시에 하기위해 


처음 접하시는 분들은 main함수에서 이리저리 하다가 실패 하는경우가 많을 것이다.


(해 보신 분들은 뼈저리게 느끼게됨 필자도 그랬으니...)

 

이때는 thread라는 기능을 이용하면 된다. (스레드? 쓰레드? 여기서는 스레드라고 적겠다.)

 

이 기능은 동시작업 기능을 도와주는 기능으로 컴퓨터의 cpu를 잡아먹긴하지만 관리만 잘 한다면 이처럼 좋은 기능은 없을 것이다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include<stdio.h>
#include<Windows.h>
#include<process.h> // 스레드를 위해 존재
#include<time.h> // clock을 위해 존재
 
 
void gotoxy(int x, int y)      // 좌표 보내기 gotoxy 
{
    
 
     COORD Cur;
     Cur.X=x;
     Cur.Y=y;
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur);
}
 
clock_t start, finish; // 시간표현 전역변수 지정
 
    double duration = 0;
 
unsigned __stdcall Thread_timer(void *arg)//스레드 타이머
{
 
 
  start = clock();
  while(1)
  {
    if( duration >= 60 ) // 60초가 경과되면 스레드는 리턴되어 cpu 사용을 중지하게 된다.
    {
     
      return 0;
    } 
 
    finish = clock() - start;
    duration = (double) finish / CLOCKS_PER_SEC; 
 
    
   
  }
 
 
}
 
 
 
int main()
{
     
 
int m = 0;
 _beginthreadex(NULL, 0, Thread_timer, 00,NULL);// 스레드 시작
 
while(1)
 {
         
     gotoxy(0,0);printf("%.3f",duration);
     
    while(m != 5)
    {
     gotoxy(0,m+2);printf("안녕하세요");
     gotoxy(0,m+1);printf("          ");
     m++;
     Sleep(10);
    }
    gotoxy(0,m+1);printf("          ");
    m = 0;
 
 
}
}
 
 
 
Crocus

 

더 좋은 스레드 예시문으로 게시하고 싶었지만 마땅히 좋은 예시문이 떠오르지 않아 이렇게만 올렸다.

 

하지만 이전 MIDI에서 스레드 활용을 보시고 스레드에 대해서 많은 응용을 하길 바란다.

반응형