Согласно комментарию ОП:
#include <sys/time.h>
int deltaTime(struct timeval *tv1, struct timeval *tv2){
return ((tv2->tv_sec - tv1->tv_sec)*1000000)+ tv2->tv_usec - tv1->tv_usec;
}
//might require longs anyway. this is time in microseconds between the 2 timevals
void execute_for_wallTime(int wallTime)
{
struct timeval tvStart, tvNow;
gettimeofday(&tvStart, NULL);
double d = 0;
for (int m = 0; wall_time; ++m){
gettimeofday(&tvNow, NULL);
if(deltaTime(tvStart,tvNow) >=wall_time) { // if timeWall is 1000 microseconds,
// this function returns after
// 1000 microseconds (and a
// little more due to overhead)
return;
}
d += d*m;
}
}
Теперь работайте с timeWall, увеличивая или уменьшая его в логике вне этой функции в зависимости от ваших вычислений производительности.Эта функция просто запускается в течение микросекунд timeWall.
Для стиля C ++ вы можете использовать std :: chrono .
Я должен прокомментировать, что я буду обрабатывать вещи по-другому, напримервызывая nanosleep ().Операции не имеют смысла, если только в реальном коде вы не планируете заменять эти «заполнители» фактическими операциями.В этом случае вы можете рассмотреть потоки и планировщики.Помимо часов звонки добавить накладные расходы.