diff options
Diffstat (limited to 'gnuradio-core/src/lib/runtime/gr_realtime.cc')
-rw-r--r-- | gnuradio-core/src/lib/runtime/gr_realtime.cc | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/gnuradio-core/src/lib/runtime/gr_realtime.cc b/gnuradio-core/src/lib/runtime/gr_realtime.cc index 878411df29..35d0ef3810 100644 --- a/gnuradio-core/src/lib/runtime/gr_realtime.cc +++ b/gnuradio-core/src/lib/runtime/gr_realtime.cc @@ -1,6 +1,6 @@ /* -*- c++ -*- */ /* - * Copyright 2006 Free Software Foundation, Inc. + * Copyright 2006,2007 Free Software Foundation, Inc. * * This file is part of GNU Radio * @@ -58,6 +58,33 @@ gr_enable_realtime_scheduling() return RT_OK; } +#elif defined(HAVE_PTHREAD_SETSCHEDPARAM) + +#include <pthread.h> + +gr_rt_status_t +gr_enable_realtime_scheduling() +{ + int policy = SCHED_FIFO; + int pri = (sched_get_priority_max (policy) + + sched_get_priority_min (policy)) / 2; + pthread_t this_thread = pthread_self (); // this process + struct sched_param param; + memset (¶m, 0, sizeof (param)); + param.sched_priority = pri; + int result = pthread_setschedparam (this_thread, policy, ¶m); + if (result != 0) { + if (errno == EPERM) + return RT_NO_PRIVS; + else { + perror ("pthread_setschedparam: failed to set real time priority"); + return RT_OTHER_ERROR; + } + } + //printf("SCHED_FIFO enabled with priority = %d\n", pri); + return RT_OK; +} + // #elif // could try negative niceness #else |