time.h와 sys/time.h에 대해서 질문입니다.....

leo~~~~의 이미지

타이머를 사용하기 위해서 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초마다 되는데 같은값이 두번 출력되요,.....
대체....왜 그런건가요..??

eungkyu의 이미지

srand는 프로그램을 시작할 때 한번만 하는 것입니다.

씨드 값이 같으면 다음 랜덤값은 항상 같죠. time 함수의 값은 초단위이기 때문에 한 0.5초 간격으로 srand를 하면 두번은 같은 씨드가 되기 때문에 다음 rand의 값이 같은 것입니다.

즉, 프로그램 시작때 srand를 한 번 하고 나머지는 rand함수만 사용하면 됩니다.

그래도 씨드값을 time함수로 정할 경우 1초 내에 프로그램을 두번 수행하면 랜덤값이 같게 되죠. ;;

익명 사용자의 이미지

아~~ 그렇군요..^^ 감사합니다~~
srand를 함수 부분에서 빼고 메인부분에다 넣으니까 되네요~~
감사합니다~~~^^

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.