Clean up sleep.c

pull/1626/head
Mike Black W9MDB 2024-09-28 22:48:11 -05:00
rodzic 7bde413c52
commit 548745d1f0
1 zmienionych plików z 8 dodań i 7 usunięć

Wyświetl plik

@ -50,19 +50,16 @@ extern double monotonic_seconds();
int hl_usleep(rig_useconds_t usec) int hl_usleep(rig_useconds_t usec)
{ {
double sleep_time = usec / 1e6; double sleep_time = usec / 1e6;
struct timespec tv1, tv2; struct timespec tv1;
double start_at = monotonic_seconds(); double start_at = monotonic_seconds();
double end_at = start_at + sleep_time; double end_at = start_at + sleep_time;
double delay = sleep_time; double delay = sleep_time;
double lasterr = 0;
if (sleep_time > .001) { delay -= .0001; } if (sleep_time > .001) { delay -= .0001; }
else if (sleep_time > .0001) { delay -= .00005; } else if (sleep_time > .0001) { delay -= .00005; }
tv1.tv_sec = (time_t) delay; tv1.tv_sec = (time_t) delay;
tv1.tv_nsec = (long)((delay - tv1.tv_sec) * 1e+9); tv1.tv_nsec = (long)((delay - tv1.tv_sec) * 1e+9);
tv2.tv_sec = 0;
tv2.tv_nsec = 1000000;
// rig_debug(RIG_DEBUG_CACHE,"usec=%ld, sleep_time=%f, tv1=%ld,%ld\n", usec, sleep_time, (long)tv1.tv_sec, // rig_debug(RIG_DEBUG_CACHE,"usec=%ld, sleep_time=%f, tv1=%ld,%ld\n", usec, sleep_time, (long)tv1.tv_sec,
// (long)tv1.tv_nsec); // (long)tv1.tv_nsec);
@ -74,26 +71,30 @@ int hl_usleep(rig_useconds_t usec)
double elapsed; double elapsed;
QueryPerformanceFrequency(&frequency); QueryPerformanceFrequency(&frequency);
QueryPerformanceCounter(&start); QueryPerformanceCounter(&start);
long long loops=0;
do { do {
struct timespec startc; struct timespec startc;
clock_gettime(CLOCK_REALTIME, &startc); clock_gettime(CLOCK_REALTIME, &startc);
QueryPerformanceCounter(&end); QueryPerformanceCounter(&end);
elapsed = (double)(end.QuadPart - start.QuadPart) / frequency.QuadPart; elapsed = (double)(end.QuadPart - start.QuadPart) / frequency.QuadPart;
++loops;
} while (elapsed < sleep_time); } while (elapsed < sleep_time);
} else { } else {
// Use Sleep for larger durations >= 3 milliseconds // Use Sleep for larger durations >= 3 milliseconds
//Sleep((DWORD)(seconds * 1000 - 1)); // Convert seconds to milliseconds //Sleep((DWORD)(seconds * 1000 - 1)); // Convert seconds to milliseconds
usleep(sleep_time*1e6-400); usleep(sleep_time*1e6-400);
} }
#else #else
{
struct timespec tv2;
double lasterr = 0;
tv2.tv_sec = 0;
tv2.tv_nsec = 1000000;
nanosleep(&tv1, NULL); nanosleep(&tv1, NULL);
while (((lasterr = end_at - monotonic_seconds()) > 0)) while (((lasterr = end_at - monotonic_seconds()) > 0))
{ {
nanosleep(&tv2, NULL); nanosleep(&tv2, NULL);
} }
}
#endif #endif
return 0; return 0;