sleep 함수 이용하기

irum66의 이미지

        for(j=0;j<3;j++)
        {
                sleep(10);
                a2 = get_ip_comm(&k);

                printf("%d\n",k);
                for(i=0;i<k;i++)
                {
                        printf("%s    %s\n",a2.ip[i],a2.comm[i]);
                }
                printf("-------------------------\n");
        }

여기서 for 문으로 10초마다 한번씩 처리해서 3번 루프돌게 하고싶은데
위 프로그램은 10초동안 대기하고
한꺼번에 루프를 3번 돌고 끝나버리는데,,,
아무래도 sleep이 한번 실행되고 종료되는것 같습니다.

제가 생각했던 대로 10초에 한번씩 루프를 돌게 하려면 어떻게 해야 하나여??
고수님들의 많은 도움 기다리겠습니다 ^_____________^;;

cdpark의 이미지

질문의 답은 아니지만 해결책은 fflush(stdout)이 답일 듯 싶네요. sleep 앞이나 for loop 마지막에 넣어보세요.

irum66의 이미지

cdpark님아... fflush() 해도 안되는군요...

cdpark의 이미지

"님아"라.. :(

#include <stdio.h>
main()
{
    int i;
    for (i=0; i<10; i++)
    {
        printf(".");
        sleep(1);
    }
    printf("\n");
}

다른 데 문제가 있는 건 아니고요?

simryang의 이미지

제 컴퓨터(Ubuntu Edgy Eft, P4 1.7GHz, 2.6.17-10-generic)에서는 위 코드를 컴파일시켰더니 10초를 기다리고 문자가 다 찍히네요. 무슨 문제인지 잘 모르겠습니다.
--------------
若無湖南 是無國家
= 忠武公 =

--------------
若無湖南 是無國家
= 忠武公 =

simryang의 이미지

아.. 위의 fflush() 라는 글귀를 못봤었는데 printf 문 앞에 fflush( stdout ) 를 넣었더니 1초씩 기다리며 잘 됩니다. 감사합니다~ ^^
--------------
若無湖南 是無國家
= 忠武公 =

--------------
若無湖南 是無國家
= 忠武公 =

익명 사용자의 이미지

sleep()이 죽는 이유는 통상 시그널땜인데...
특히 SIGALRM과 SIGCHLD를 블럭시켜주심이...쩝..SIGSTOP과 SIGCONT도 함
생각해 보시구요...

datamind의 이미지

sleep 은 정교하지 못하므로,
아래 처럼 만들어서 사용하세요..

void nSleep(long sec)
{
    struct timeval tv;

    tv.tv_sec = sec; 
    tv.tv_usec = 0;

    select( 0, NULL, NULL, NULL, &tv );
}
galien의 이미지

sleep은 정교하지 못한 대신 cpu를 덜 쓰고
select는 정교한 대신 busy wait을 한다고 들었습니다.

sleep과 select는 용도가 다른 것이 아닐까요?

혹시 sleep이 1초 이상의 오류가 생기는 경우도 있을까요?
호기심에 질문해 봅니다.

익명 사용자의 이미지


(제목 그대로.)

그리고 sleep이 "정교하지 못하다"라는 말은 좀 이상한데요, 물론 sleep의 단위가 1초 단위이긴 하지만 일단 값을 준 다음에는 select보다 크게 차이날 이유가 없을 것 같습니다. (그러니까 sleep으로 1초 쉬는 것보다 select로 1초 쉬는 게 더 정확할 이유가 없다는 말입니다.)

실제로 뭐가 얼마나 더 정확하냐 하는 건 OS 소스를 뒤져 봐야 되겠지만요...

그리고 sleep이든 select든 "최소한 x.xx초 쉰다"만 보장이 되지 정확히 그 순간이 되면 깨어난다는 것은 어느 쪽이든 보장이 되지 않습니다. 시스템에 로드가 많이 걸리면 깨어나는 순간이 훨씬 늦어질 수 있죠.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.