1

ミリ秒のスリープ間隔に 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);
4

2 に答える 2

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;  
于 2013-06-18T14:49:34.883 に答える