토익스피킹 공부한다고 한창 할 때... 생각나서 만들어본 타이머...

토익스피킹 처럼 준비시간/답변시간을 입력하면 카운트를 보여준다

beep음을 추가하면 더 좋았을 것 같지만 이미 더 좋은 타이머들이 많고

카운트 되는 숫자가 타이머와 일치하지 않은 버그도 있어서 

한 번 타이머를 써본 것에 의의를 둔 기억이..

 

먼저 main함수를 보면 준비시간과 답변시간을 입력 받아 순차적으로 timer를 동작시킨다. 

이때 timer를 카운트 하기 위해 TimerTick이란 함수를 사용하였다.

func main() {
	pTime := os.Args[1]
	sTime := os.Args[2]
	pt, _ := strconv.Atoi(pTime)
	st, _ := strconv.Atoi(sTime)
	pTimer = time.NewTimer(time.Second * time.Duration(pt))
	pState := 0
	log.Println("Prepare Time Start")
	go TimerTick(pt)
	for {
		select {
		case <-pTimer.C:
			log.Println("PreTime END")
			pState = 1

		}
		if pState == 1 {
			break
		}
	}
	aTimer = time.NewTimer(time.Second * time.Duration(st))
	aState := 0
	log.Println("Answer Time Start")
	go TimerTick(st)
	for {
		select {
		case <-aTimer.C:
			log.Println("AnswerTime END")
			aState = 1
		}
		if aState == 1 {
			break
		}
	}
}

 

1초마다 Cnt수를 콘솔에 출력하기 위해 만들었다. 

(지금보니 리턴은 왜 한지 모르겠지만...)

고루틴으로 실행하였기에 실제 준비시간 또는 답변시간의 타이머의 시작 시간과 차이가 있어 정확히 시간이 카운트 되지 않는 버그가 있지만.....

실제 시험에서는 긴장을 하고, 어떤 변수가 있을 지 모르기에

카운트가 조금 짧게 느껴지도록 연습하면 되지 않을까 위안을 삼았던 기억이 있다...ㅎ

func TimerTick(cnt int) bool {
	ticker := time.NewTicker(time.Second)
	for {
		select {
		case <-ticker.C:
			if cnt == 0 {
				break
			}
			log.Println("CNT : ", cnt)
			cnt--

		}
	}
	return true
}

아무튼 timerTick함수로 카운트를 출력하는 것을 제외하고는 정해진 시간만큼 대기하는 기능은 잘 동작하는 것 같았다

 

실행 결과

 

끝!

반응형

+ Recent posts