sleep 함수 이용하기
글쓴이: irum66 / 작성시간: 수, 2003/05/14 - 4:38오후
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초에 한번씩 루프를 돌게 하려면 어떻게 해야 하나여??
고수님들의 많은 도움 기다리겠습니다 ^_____________^;;
Forums:
질문의 답은 아니지만 해결책은 fflush(stdout)이 답일 듯 싶네
질문의 답은 아니지만 해결책은 fflush(stdout)이 답일 듯 싶네요. sleep 앞이나 for loop 마지막에 넣어보세요.
fflush() 해도 안되는 군요..
cdpark님아... fflush() 해도 안되는군요...
"님아"라.. :([code:1]#include <stdio
"님아"라.. :(
다른 데 문제가 있는 건 아니고요?
제 컴퓨터(Ubuntu Edgy
제 컴퓨터(Ubuntu Edgy Eft, P4 1.7GHz, 2.6.17-10-generic)에서는 위 코드를 컴파일시켰더니 10초를 기다리고 문자가 다 찍히네요. 무슨 문제인지 잘 모르겠습니다.
--------------
若無湖南 是無國家
= 忠武公 =
--------------
若無湖南 是無國家
= 忠武公 =
아.. 위의 fflush() 라는
아.. 위의 fflush() 라는 글귀를 못봤었는데 printf 문 앞에 fflush( stdout ) 를 넣었더니 1초씩 기다리며 잘 됩니다. 감사합니다~ ^^
--------------
若無湖南 是無國家
= 忠武公 =
--------------
若無湖南 是無國家
= 忠武公 =
코드상에 문제는 없는듯...
sleep()이 죽는 이유는 통상 시그널땜인데...
특히 SIGALRM과 SIGCHLD를 블럭시켜주심이...쩝..SIGSTOP과 SIGCONT도 함
생각해 보시구요...
sleep 대신이 이걸 사용하세요...
sleep 은 정교하지 못하므로,
아래 처럼 만들어서 사용하세요..
sleep vs select
sleep은 정교하지 못한 대신 cpu를 덜 쓰고
select는 정교한 대신 busy wait을 한다고 들었습니다.
sleep과 select는 용도가 다른 것이 아닐까요?
혹시 sleep이 1초 이상의 오류가 생기는 경우도 있을까요?
호기심에 질문해 봅니다.
select도 busy wait 안합니다.
(제목 그대로.)
그리고 sleep이 "정교하지 못하다"라는 말은 좀 이상한데요, 물론 sleep의 단위가 1초 단위이긴 하지만 일단 값을 준 다음에는 select보다 크게 차이날 이유가 없을 것 같습니다. (그러니까 sleep으로 1초 쉬는 것보다 select로 1초 쉬는 게 더 정확할 이유가 없다는 말입니다.)
실제로 뭐가 얼마나 더 정확하냐 하는 건 OS 소스를 뒤져 봐야 되겠지만요...
그리고 sleep이든 select든 "최소한 x.xx초 쉰다"만 보장이 되지 정확히 그 순간이 되면 깨어난다는 것은 어느 쪽이든 보장이 되지 않습니다. 시스템에 로드가 많이 걸리면 깨어나는 순간이 훨씬 늦어질 수 있죠.
댓글 달기