2013-06-18 5 views
1

밀리 초 단위로 pthread_cond_timedwait를 사용하려고하는데 휴면 시간이 없습니다. 내 스레드는 내가 언급 한 것보다 더 자고있다. 아래는 나의 구현이다. 내가 어디서나 틀렸다면 알려줘.밀리 초 단위로 pthread_cond_timedwait를 사용하는 방법

struct timeval tp; 
    struct timespec ts; 
    int rc = gettimeofday(&tp, NULL); 

    ts.tv_sec = tp.tv_sec; 
    ts.tv_nsec = tp.tv_usec * 1000; 

    ts.tv_nsec += 30 * 1000000; //30 is my milliseconds 

    pthread_mutex_lock(&mtxPlaybackWait); 
    pthread_cond_timedwait(&playbackSignal, &mtxPlaybackWait, &ts); 
    pthread_mutex_unlock(&mtxPlaybackWait); 
+0

당신이 스레드가 자고 정확한 시간을 알 수 있습니까? 시간 초과가 발생합니까? –

+0

시간 초과가 발생하고 잠자기 시간은 항상 내가 설정 한 밀리 초 이상입니다. 뮤텍스 잠금은 추가 시간이 걸릴 수 있습니까? – sam18

답변

0

timespac은 오버플로되어 시간이 초과 될 수 있습니다. 다음
시도 :

 ts.tv_sec = tp.tv_sec; 
    ts.tv_nsec = tp.tv_usec * 1000; 

    ts.tv_nsec += 30 * 1000000; 

    ts.tv_sec += ts.tv_nsec/1000000000L; 
    ts.tv_nsec = ts.tv_nsec % 1000000000L; 
+0

감사합니다. 나는 당신이 말한 것과 같은 것을 경험했습니다. 나 해보자. 너에게 알려 줄거야. – sam18

관련 문제