diff options
author | Sebastian Koslowski <koslowski@kit.edu> | 2016-06-10 15:15:16 +0200 |
---|---|---|
committer | Sebastian Koslowski <koslowski@kit.edu> | 2016-07-13 16:30:36 +0200 |
commit | 893b74c770b81f2c09094577e2de720155f84b61 (patch) | |
tree | ce430f554cf032c70eab8a95228731afbffc6efd /gnuradio-runtime/lib/realtime_impl.cc | |
parent | 7ac7cf6246e4d984d36c64df10ba4d2b2f6b2204 (diff) | |
parent | 6fb0ff274a05daf2f2677af14337704fb88081f7 (diff) |
Merge remote-tracking branch 'grcwg/next_grcwg' into gtk3
Diffstat (limited to 'gnuradio-runtime/lib/realtime_impl.cc')
-rw-r--r-- | gnuradio-runtime/lib/realtime_impl.cc | 70 |
1 files changed, 35 insertions, 35 deletions
diff --git a/gnuradio-runtime/lib/realtime_impl.cc b/gnuradio-runtime/lib/realtime_impl.cc index 54db9d8d70..83afd9568d 100644 --- a/gnuradio-runtime/lib/realtime_impl.cc +++ b/gnuradio-runtime/lib/realtime_impl.cc @@ -65,7 +65,41 @@ namespace gr { #endif -#if defined(HAVE_PTHREAD_SETSCHEDPARAM) +#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) + +#include <windows.h> + +namespace gr { + namespace impl { + + rt_status_t enable_realtime_scheduling(rt_sched_param p) + { + //set the priority class on the process + int pri_class = (true)? REALTIME_PRIORITY_CLASS : NORMAL_PRIORITY_CLASS; + if(SetPriorityClass(GetCurrentProcess(), pri_class) == 0) + return RT_OTHER_ERROR; + + //scale the priority value to the constants + int priorities[] = { + THREAD_PRIORITY_IDLE, THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_BELOW_NORMAL, THREAD_PRIORITY_NORMAL, + THREAD_PRIORITY_ABOVE_NORMAL, THREAD_PRIORITY_HIGHEST, THREAD_PRIORITY_TIME_CRITICAL + }; + const double priority = double(p.priority)/(rt_priority_max() - rt_priority_min()); + size_t pri_index = size_t((priority+1.0)*6/2.0); // -1 -> 0, +1 -> 6 + pri_index %= sizeof(priorities)/sizeof(*priorities); //range check + + //set the thread priority on the thread + if(SetThreadPriority(GetCurrentThread(), priorities[pri_index]) == 0) + return RT_OTHER_ERROR; + + //printf("SetPriorityClass + SetThreadPriority\n"); + return RT_OK; + } + + } // namespace impl +} // namespace gr + +#elif defined(HAVE_PTHREAD_SETSCHEDPARAM) namespace gr { namespace impl { @@ -141,40 +175,6 @@ namespace gr { } // namespace impl } // namespace gr -#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) - -#include <windows.h> - -namespace gr { - namespace impl { - - rt_status_t enable_realtime_scheduling(rt_sched_param p) - { - //set the priority class on the process - int pri_class = (true)? REALTIME_PRIORITY_CLASS : NORMAL_PRIORITY_CLASS; - if(SetPriorityClass(GetCurrentProcess(), pri_class) == 0) - return RT_OTHER_ERROR; - - //scale the priority value to the constants - int priorities[] = { - THREAD_PRIORITY_IDLE, THREAD_PRIORITY_LOWEST, THREAD_PRIORITY_BELOW_NORMAL, THREAD_PRIORITY_NORMAL, - THREAD_PRIORITY_ABOVE_NORMAL, THREAD_PRIORITY_HIGHEST, THREAD_PRIORITY_TIME_CRITICAL - }; - const double priority = double(p.priority)/(rt_priority_max() - rt_priority_min()); - size_t pri_index = size_t((priority+1.0)*6/2.0); // -1 -> 0, +1 -> 6 - pri_index %= sizeof(priorities)/sizeof(*priorities); //range check - - //set the thread priority on the thread - if(SetThreadPriority(GetCurrentThread(), priorities[pri_index]) == 0) - return RT_OTHER_ERROR; - - //printf("SetPriorityClass + SetThreadPriority\n"); - return RT_OK; - } - - } // namespace impl -} // namespace gr - #else namespace gr { |