<div dir="ltr"><div>Dear Sir,</div><div><br></div><div>I am testing pthread_cond_timedwait() on realview-pbx-a9 using QEMU.</div><div><br></div><div>My testing code is below;</div><div><br></div><div>#include <pthread.h><br>#include <time.h></div><div>static void thread_sleep(struct timespec *ti)<br>{<br>    pthread_mutex_t mtx;<br>    pthread_cond_t cnd;</div><div>    pthread_mutex_init(&mtx, 0);<br>    pthread_cond_init(&cnd, 0);</div><div>    pthread_mutex_lock(&mtx);<br>    pthread_cond_timedwait(&cnd, &mtx, ti);<br>    pthread_mutex_unlock(&mtx);</div><div>    pthread_cond_destroy(&cnd);<br>    pthread_mutex_destroy(&mtx);<br>}</div><div>void own_msleep(unsigned long msecs)<br>{<br>    struct timeval tv;<br>    gettimeofday(&tv, 0);<br>    struct timespec ti;</div><div>    ti.tv_nsec = (tv.tv_usec + (msecs % 1000) * 1000) * 1000;<br>    ti.tv_sec = tv.tv_sec + (msecs / 1000) + (ti.tv_nsec / 1000000000);<br>    ti.tv_nsec %= 1000000000;<br>    thread_sleep(&ti);<br>}</div><div>#define TEST_1 0<br>#define TEST_2 0<br>#define TEST_3 0<br>#define TEST_4 1</div><div>int main(int argc, char *argv[]) <br>{ <br> int count = 0;<br> <br> while (1)<br> {<br>#if TEST_1 // Normal operation. total time for count 100 = almost 1 second.<br>  own_msleep(10);<br>  count++;<br>  if (count%100 == 0) printf("count=%d\n", count);<br>#endif</div><div>#if TEST_2 // Abnormal operation. total time for count 200 = about 2 seconds.<br>  own_msleep(5);<br>  count++;<br>  if (count%200 == 0) printf("count=%d\n", count);<br>#endif</div><div>#if TEST_3 // Abnormal operation. total time for count 500 = about 5 seconds.<br>  own_msleep(2);<br>  count++;<br>  if (count%500 == 0) printf("count=%d\n", count);<br>#endif</div><div>#if TEST_4 // Abnormal operation. total time for count 1000 = about 10 seconds.<br>  own_msleep(1);<br>  count++;<br>  if (count%1000 == 0) printf("count=%d\n", count);<br>#endif<br> }</div><div> return 0; <br>} </div><div><br></div><div>As you see in my testing code, I called own_msleep() function using pthread mutex, condition variable API.</div><div><br></div><div>As my result, when I use own_msleep(10), there is not any problem for this.</div><div>But, when I decrease time internal from 10ms to (5 or 2 or 1)ms, msleep() have addtional delay.</div><div><br></div><div>As I know from BSP code for realview-pbx-a9, OS timer interval is 1ms.</div><div><br></div><div>Is it correct behaivor ?</div><div>Is there any limitation for using short time interval ?</div><div><br></div><div>Please advise me.</div><div><br></div><div>Best Regards,</div><div>Thomas Kim.</div><div><br></div></div>