此问题已在此处有答案:
How to get the current time in milliseconds from C in Linux?(8个回答)
3天前关闭。
我试图得到一个时间戳在滴答开始一个周期性的任务与减少抖动.为了做到这一点,我得到滴答在每一秒的开始,并在第一次执行一个任务时,我通过减去startTicks从currentTicks初始化一个时间戳.问题是,这已被证明是非常不可靠的,因为大多数时候我的第一个任务有一个时间戳-1滴答又名-0.001s.这使我相信其余的也是无效的。
void main(){
clock_t startTicks; //Ticks at the start of Second;
time_t StartSeconds, CurrentSeconds; //
time(&StartSeconds);
time(&CurrentSeconds);
// stuff ListFunctions();
for(;;){
if(CurrentSeconds != time(NULL)){ // Groundwork of iteratig over code every second
startTicks = clock();
// initializeTasks if they need to be
// reset Task availability
time(&CurrentSeconds);
}
for (int Task = 0; Task < 4; ++Task) { // initialize timestamp on first run
if(Tasks[Task].StampInitialized == 0){
Tasks[Task].TimeStamp = clock() - startTicks;
printf("%d - %d = %d", clock(), startTicks, Tasks[Task].TimeStamp);
Tasks[Task].StampInitialized = 1;
}
// wait if time stamp hasnt been crossed
printf("Start Task %d: %.3f; ", Task + 1, 1.0 *(clock() - startTicks) / CLOCKS_PER_SECOND);
// execute Task
}
}
}
输出如下所示:
> 0 - 1 = -1 Start Task 1: 0.000;
> 3 - 1 = 2 Start Task 2: 0.005;
> 8 - 1 = 7 Start Task 3: 0.008;
> 11 - 1 = 10 Start Task 4: 0.012;
CLOCKS_PER_SECOND = 1000,根据我的测试,这是正确的。
我找不到任何可以解释时钟的东西()更详细,我很难相信它只需要-1ms从程序开始到4个任务的初始化。初始化只不过是为每个任务创建一个数组并对内容进行排序。虽然显然是从TimeStamp初始化到任务执行。(这是只写入一个变量一次和1如果问题)需要0和2 ms之间的输出所表示的.我真的想不出任何可能导致这个问题,除了一些愚蠢的逻辑错误.然而,我找不到任何东西,我希望它的东西,我可以修复,而不仅仅是奇怪的行为.
很抱歉,如果有很多信息丢失,这是我在任何论坛上的第一个问题,英语不是我的母语。我愿意接受批评和任何问题。
先谢谢你了。
1条答案
按热度按时间h9vpoimq1#
startTicks
未初始化。请初始化它。总的来说,我不明白代码中发生了什么。
if(CurrentSeconds != time(NULL)){ startTicks = clock(); time(&CurrentSeconds); }
,if
看起来什么都不做。