[英]Clock_Gettime() Jitter?
我在Linux 2.6上使用clock_gettime()(來自time.h)來控制線程循環中的計時。 我需要在+/- 5mS的時間范圍內達到500mS。 似乎給了我500ms一段時間,然后開始漂移或抖動到+/- 30ms:
我正在使用CLOCK_REALTIME調用。 有什么方法可以改善它的偏差嗎? 我只是用它來計數每個毫秒,一旦計數器達到500,就會觸發中斷。
這也在QT 4.3框架內。 QTimer似乎比這更令人不安。
根據您問題的措辭,我覺得您可能會錯誤地累積時差。
試試這種方法:
#include <stdio.h>
#include <time.h>
long elapsed_milli( struct timespec * t1, struct timespec *t2 )
{
return (long)(t2->tv_sec - t1->tv_sec) * 1000L
+ (t2->tv_nsec - t1->tv_nsec) / 1000000L;
}
int main()
{
const long period_milli = 500;
struct timespec ts_last;
struct timespec ts_next;
const struct timespec ts_sleep = { 0, 1000000L };
clock_gettime( CLOCK_REALTIME, &ts_last );
while( 1 )
{
nanosleep( &ts_sleep, NULL );
clock_gettime( CLOCK_REALTIME, &ts_next );
long elapsed = elapsed_milli( &ts_last, &ts_next );
if( elapsed >= period_milli )
{
printf( "Elapsed : %ld\n", elapsed );
ts_last.tv_nsec += period_milli * 1000000L;
if( ts_last.tv_nsec >= 1000000000L )
{
ts_last.tv_nsec -= 1000000000L;
ts_last.tv_sec++;
}
}
}
return 0;
}
每次經過所需時間后,都會更新“上一個”時間,以使用該時間段的預期時間,而不是實際時間。 本示例在每次輪詢之間使用1毫秒的睡眠時間,這可能超出了頂部。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.