time.h와 sys/time.h에 대해서 질문입니다.....
타이머를 사용하기 위해서 sys/time.h를 include하고
사용 했을 때 는 interval을 1초로하던 2초로 하던 0.5초로 하던
아무 이상없이 실행이 되었습니다....
제가 타이머의 interval마다 다른 랜덤 값을 출력하려고
srand와 rand를 사용하기 위해 time.h를 인클루드했습니다...
그리고 나서 실행을 했습니다.....
타이머의 interval을 1초로 했을때는 아무문제 없이
1초마다 바뀐 값이 출력 되었습니다.....
근데 문제는요.....interval을 0.5초(500msec)로 하면....
같은 값이 두번씩 출력됩니다...
그니까 값은 1초에 한번씩 바뀌고 출력은 0.5초에 한번씩 하는 겁니다...
0.2초로 하면 같은 값이 5번 출력 되구요....ㅜ.ㅜ
그니까 값은 1초 간격으로 바뀝니다.....
왜 그런건가요.......????
time.h와 sys/time.h 얘네 둘을 같이 쓰면 안되는 건가요??
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <sys/time.h>
#include <time.h>
#include <string.h>
void timer_handler(int signum)
{
int sen=0;
srand(time(NULL));
sen = rand ()%100+1;
printf("%d\n", sen);
}
int main()
{
struct sigaction sa;
struct itimerval timer;
memset(&sa, 0, sizeof(sa));
sa.sa_handler = &timer_handler;
sigaction(SIGVTALRM, &sa, NULL);
timer.it_value.tv_sec = 0;
timer.it_value.tv_usec = 1000000;
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 500000;
setitimer(ITIMER_VIRTUAL, &timer, NULL);
while(1);
}
이게 소스인데요.....
timer.it_interval.tv_usec = 500000;
interval을 이렇게 하면
30
30
25
25
78
78
이런식으로 값은 1초에 한번씩바뀌고 출력은 0.5초마다 되는데 같은값이 두번 출력되요,.....
대체....왜 그런건가요..??
srand는 프로그램을 시작할 때 한번만 하는 것입니다.씨드 값이
srand는 프로그램을 시작할 때 한번만 하는 것입니다.
씨드 값이 같으면 다음 랜덤값은 항상 같죠. time 함수의 값은 초단위이기 때문에 한 0.5초 간격으로 srand를 하면 두번은 같은 씨드가 되기 때문에 다음 rand의 값이 같은 것입니다.
즉, 프로그램 시작때 srand를 한 번 하고 나머지는 rand함수만 사용하면 됩니다.
그래도 씨드값을 time함수로 정할 경우 1초 내에 프로그램을 두번 수행하면 랜덤값이 같게 되죠. ;;
아~~ 그렇군요..^^ 감사합니다~~srand를 함수 부분에서 빼고
아~~ 그렇군요..^^ 감사합니다~~
srand를 함수 부분에서 빼고 메인부분에다 넣으니까 되네요~~
감사합니다~~~^^
댓글 달기