kopia lustrzana https://github.com/Hamlib/Hamlib
Clean up sleep.c
rodzic
7bde413c52
commit
548745d1f0
15
src/sleep.c
15
src/sleep.c
|
@ -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;
|
||||||
|
|
Ładowanie…
Reference in New Issue