diff options
author | Paul Cercueil <paul.cercueil@analog.com> | 2015-09-14 14:53:35 +0200 |
---|---|---|
committer | Johnathan Corgan <johnathan@corganlabs.com> | 2016-05-30 13:23:22 -0700 |
commit | 25142dad0464bed59dc03672931aab637f82d376 (patch) | |
tree | 1ec31795dbb5a1d98aa941e17c38b30c58964e02 /gnuradio-runtime/lib/realtime_impl.cc | |
parent | ae26f969c9c260556aad4ffd006fea96f3452d01 (diff) |
cmake: Windows-specific fixes for compatibility
* Properly wrap the prefix variables in quotation marks. This allows
to set an empty prefix.
* Fix library names when compiling for Windows. This now also works
when using mingw-w64.
* Fix boost module name when compiling with mingw-w64
* Fix build under mingw-w64
* Fix config.h header to avoid macro redefinition
* Remove duplicated Boost::thread entry in dependencies list
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 { |