12 #include <mrpt/config.h>
16 #ifdef MRPT_OS_WINDOWS
23 #include <sys/select.h>
34 #include <sys/types.h>
36 #include <mach/mach_init.h>
37 #include <mach/thread_act.h>
38 #include <sys/sysctl.h>
45 #ifdef MRPT_OS_WINDOWS
47 SetThreadPriority(GetCurrentThread(), priority);
49 const pthread_t tid = pthread_self();
52 struct sched_param param
56 if (0 != (ret = pthread_getschedparam(tid, &policy, ¶m)))
59 <<
"[mrpt::system::changeThreadPriority] Warning: Failed call to "
60 "pthread_getschedparam (error: `"
61 << strerror(ret) <<
"`)" << std::endl;
66 int min_prio = sched_get_priority_min(policy),
67 max_prio = sched_get_priority_max(policy);
68 if (min_prio < 0) min_prio = 1;
69 if (max_prio < 0) max_prio = 99;
78 prio = (max_prio + 3 * min_prio) / 4;
81 prio = (max_prio + 2 * min_prio) / 3;
84 prio = (max_prio + min_prio) / 2;
87 prio = (2 * max_prio + min_prio) / 3;
90 prio = (3 * max_prio + min_prio) / 4;
97 param.sched_priority = prio;
98 if (0 != (ret = pthread_setschedparam(tid, policy, ¶m)))
101 <<
"[mrpt::system::changeThreadPriority] Warning: Failed call to "
102 "pthread_setschedparam (error: `"
103 << strerror(ret) <<
"`)" << std::endl;
111 #ifdef MRPT_OS_WINDOWS
116 dwPri = IDLE_PRIORITY_CLASS;
119 dwPri = NORMAL_PRIORITY_CLASS;
122 dwPri = HIGH_PRIORITY_CLASS;
125 dwPri = REALTIME_PRIORITY_CLASS;
130 SetPriorityClass(GetCurrentProcess(), dwPri);
151 const int ret = nice(nice_val);
152 if (ret == -1 && errno == EPERM)
154 std::cerr <<
"[mrpt::system::changeCurrentProcessPriority] Error "
155 "calling nice(): Not enough permissions.\n";