흠.. 뭘하는건지 정확히 모르겠지만
hsec에 100을 넣으면 일단 -1이 나오겠네요.
4320000은 50일을 초로 환산한 것인데 hsec값이 저 값을 초과하면 0이 나오게 됩니다.
다만 TE에는 다시 100일치 초를 누적해서 TS와는 50일치 차이가 나게 됩니다.
WaitHTime을 계속 호출하면서 hsec값이 증가하여 50일이 지나면 무슨 일이 일어나는가 보네요 ㅡ.ㅡ;
그러고 pos는 static int 배열을 일종의 메모리 풀로 활용하거나 100개의 장비?를
관리하는 뭔가 구분기준이 되겠네요.
코드가 혼자만의 c 스타일 네이밍이라 가독성에 마이너스 점수를 줍니다. -_-+...
김주상 님이 쓰신 글 :
: 제 실력으로는 너무 어려워서 해석을 못 하겠습니다.
: pos에 83,hsec에 100을 넣었을때 어떤 값이 반환되나요?
: 알기쉬운 해석 부탁드립니다.
:
: unsigned long Time2HSec(struct time ct)
: {
: return
: _Time2HSec(ct.ti_hour % 24,
: ct.ti_min % 60,
: ct.ti_sec % 60,
: ct.ti_hund %100);
: }
:
: int WaitHTime(int pos, long hsec)
: {
: static unsigned long TS[100],TE[100];
: struct time t1,t2;
: static int TA[100],init=0;
:
: if(EmerGenCy){ TA[pos]=0; return 0;}
: if(pos<0 || pos>99) return 0;
: if(!init) for(init=0; init<100; init++) TA[init]=0;
: if(!hsec) {TA[pos]=0; return 0;}
: disable();
: if(!TA[pos]) {gettime(&t1); TS[pos]=Time2HSec(t1)+hsec; TA[pos]=-1;}
: gettime(&t2); TE[pos]=Time2HSec(t2);
: if((long)(TS[pos]-TE[pos])>4320000L) TE[pos]+=24L*60L*60L*100L;
: if(TS[pos]<=TE[pos]) TA[pos]=0;
: enable();
: return TA[pos];
: }
|