- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[C/C++] Linux C - 간단한 Timer 구현 본문
여기서 구현하고자 하는 Timer는 단순히 현재 시간을 얻어오려는 함수가 아니라 일정 시간마다 특정한 함수를 수행하게 해주는 Timer를 말한다. Windows의 onTimer 함수처럼 말이다. Linux에서도 onTimer와 같은 함수를 쉽게 만들 수 있는데, 아래와 같이 구현하면 된다.
#include <time.h>
#include <signal.h>
#include <unistd.h>
void StartTimer (timer_t timerid, void (*Func)(int), long nsecInterval)
{
struct itimerspec value;
struct sigevent av_sig_spec;
av_sig_spec.sigev_notify = SIGEV_SIGNAL;
av_sig_spec.sigev_signo = SIGRTMIN;
value.it_value.tv_sec = 0;
value.it_value.tv_nsec = nsecInterval;
value.it_interval.tv_sec = 0;
value.it_interval.tv_nsec = nsecInterval;
timer_create (CLOCK_REALTIME, &av_sig_spec, timerid);
timer_settime (*timerid, 0, &value, NULL);
signal(SIGRTMIN+ nIDEvent, Func);
}
그리고 main function 같은 곳에서 아래처럼 간단히 불러주면 된다.
// timerID, function pointer, interval time (nano second)
StartTimer (timerID, Render, 30 * 1000000);
while(1)
{
usleep(20);
if (g_frameNum >= 330)
{
timer_delete(timerID);
break;
}
}
위의 경우는 30ms마다 한 번씩 Render라는 함수가 호출되도록 Timer를 만든 것이다. 30ms마다 한 frame씩 그려서 330 frame을 그린 후에 timer를 삭제하고, while loop를 빠져나가도록 하였다. usleep을 사용한 이유는 Render 함수를 수행하지 않는 동안에 CPU를 다른 프로세스가 쓸 수 잇게 하기 위해서다.
'★─Programing > ☆─C | C++' 카테고리의 다른 글
[C/C++] localtime time_t형 값에서 지역 시간 정보 구하기 (1) | 2013.04.22 |
---|---|
[C/C++] Linux C - 리눅스 타이머(Linux timer) class 구현 (0) | 2013.04.19 |
[C/C++] 오버로딩과 오버라이딩!!! (0) | 2011.11.03 |
[C/C++] callback 함수의 이해 (4) | 2011.11.01 |
[C/C++] Visual Studio 2005 Warnning Deprecated Function (0) | 2011.11.01 |