클라이언트로 받은 데이터를 서버가 저장하고 있다가 특정 시간이 되면 다른 서버로 데이터를 넘기려고 합니다. 스케줄링 하는 함수를 sleep()함수를 가지고 만들려고 하는데 좀 감이 안오네요.. 좋은 방법이 있으면 알려주심 감사하겠습니다.
while(true) { if(시간됐나?) { 데이터 넘기기 } else { sleep(60); } }
이렇게 하면 되는거 아닌가요?
위에껀 60초 마다 시간 확인하는 방식의 예입니다. 저렇게 플밍할때 잊지 마셔야 하는게 저렇게 하면 1분 마다 시간 체크를 하는게 아닙니다. 시간 체크 루틴 실행 시간도 고려해 주셔야 합니다. 가령 시간 체크 루틴이 11초 걸린다면 71 초 마다 시간 체크를 하는거죠 그래서 문제되는경우가
10분 00초에 체크. 11분 11초에 체크. 12분 22초에 체크. 13분 33초에 체크. 14분 44초에 체크. 15분 55초에 체크. 17분 06초에 체크.
바로 마지막 부분의 15분과 17분.. 16분이 없다는거죠 만약 시간 체크를 해서 16분일때 어떤 작업을 하겠끔 했다면 작업이 안되고 넘어가 버리는 문제가 생깁니다.
그래서 signal 을 이용해서 alram 셋팅을 해서 하는 방법도 있고 sleep 로 여전히 하고 싶으시다면 상태를 체크할 flag 를 추가 해서 문제를 해결하 수도 있고 하져.
제가 기억하기론 sleep은 alarm으로 구현되어있는걸루 압니다. 그리고 가장 확실한 것은 이전 시간을 기억하고 있다고 현재시간과의 차이만큼을 빼서 다시 sleep 하면 되겠군요. 시간이야 몇초의 오차를 감수한다면 그냥 같거나 크다 로 비교해서 넘기면 되겠구요
======================================== * The truth will set you free.
텍스트 포맷에 대한 자세한 정보
<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]
while(true){ if(시간됐나?) { 데이터 넘기
while(true)
{
if(시간됐나?)
{
데이터 넘기기
}
else
{
sleep(60);
}
}
이렇게 하면 되는거 아닌가요?
위에껀 60초 마다 시간 확인하는 방식의 예입니다.
저렇게 플밍할때 잊지 마셔야 하는게 저렇게 하면
1분 마다 시간 체크를 하는게 아닙니다.
시간 체크 루틴 실행 시간도 고려해 주셔야 합니다.
가령 시간 체크 루틴이 11초 걸린다면
71 초 마다 시간 체크를 하는거죠
그래서 문제되는경우가
10분 00초에 체크.
11분 11초에 체크.
12분 22초에 체크.
13분 33초에 체크.
14분 44초에 체크.
15분 55초에 체크.
17분 06초에 체크.
바로 마지막 부분의 15분과 17분.. 16분이 없다는거죠
만약 시간 체크를 해서 16분일때 어떤 작업을 하겠끔 했다면 작업이 안되고 넘어가 버리는 문제가 생깁니다.
그래서 signal 을 이용해서 alram 셋팅을 해서 하는 방법도 있고 sleep 로 여전히 하고 싶으시다면 상태를 체크할 flag 를 추가 해서 문제를 해결하 수도 있고 하져.
sleep은 alarm으로 구현된게 아니던가요?
제가 기억하기론 sleep은 alarm으로 구현되어있는걸루 압니다.
그리고 가장 확실한 것은 이전 시간을 기억하고 있다고 현재시간과의 차이만큼을 빼서 다시 sleep 하면 되겠군요. 시간이야 몇초의 오차를 감수한다면 그냥 같거나 크다 로 비교해서 넘기면 되겠구요
========================================
* The truth will set you free.
댓글 달기