Нет простого способа сделать то, что ты думаешь. К счастью, есть простые способы сделать то, что вы хотите.
Первый: Using the functions time() and difftime() in a loop to determine how much time was elapsed
Это ужасная идея. Это будет использовать 100% одного из ваших процессоров и тем самым замедлит вашу программу для сканирования. Если вы хотите подождать определенное время («тик» 1/60 секунды или 1/10 секунды), просто подождите. Не крути нить.
Заголовок:
long long get_time();
long long get_freq();
void wait_for(long long nanoseconds);
касты:
#ifdef _MSC_VER //windows compiler for windows machines
long long get_time() {
LARGE_INTEGER r;
QueryPerformanceCounter(r);
return r.QuadPart;
}
long long get_freq() {
LARGE_INTEGER r;
QueryPerformanceFrequency(r);
return r.QuadPart;
}
void wait_for(long long nanoseconds)
{
Sleep(nanoseconds / 1000000);
}
#endif
#ifdef __GNUC__ //linux compiler for linux machines
long long get_time() {
timespec r
clock_gettime(CLOCK_MONOTONIC, &r);
return long long(r.seconds)*1000000000 + r.nanoseconds;
}
long long get_freq() {
timespec r
clock_getres(CLOCK_MONOTONIC, &r);
return r.nanoseconds;
}
void wait_for(long long nanoseconds)
{
timespec r = {nanoseconds/1000000000, nanoseconds%1000000000};
nanosleep(&r, NULL);
}
#endif
Ничто из этого не идеально (тем более, что я не пишу код для Linux), но это общая концепция, когда вам приходится иметь дело с ОС (поскольку она не входит в стандартную комплектацию, и вы не можете использовать библиотеки). Реализации Windows и GCC могут быть в отдельных файлах, если вам нравится