.. _program_listing_file_falcon_threadutilities.cpp: Program Listing for File threadutilities.cpp ============================================ |exhale_lsh| :ref:`Return to documentation for file ` (``falcon/threadutilities.cpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // --------------------------------------------------------------------- // This file is part of falcon-core. // // Copyright (C) 2015, 2016, 2017 Neuro-Electronics Research Flanders // // Falcon-server is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Falcon-server is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with falcon-core. If not, see . // --------------------------------------------------------------------- #include #include "threadutilities.hpp" bool set_realtime_priority(pthread_t thread, ThreadPriority priority) { if (priority < PRIORITY_LOW) { return true; } double fraction = static_cast(priority) / 100; if (fraction > 1) { fraction = 1.0; } auto priority_max = sched_get_priority_max(SCHED_FIFO); auto priority_min = sched_get_priority_min(SCHED_FIFO); // struct sched_param is used to store the scheduling priority struct sched_param params; // calculate priority value params.sched_priority = (int)(fraction * (priority_max - priority_min) + priority_min); // Attempt to set thread real-time priority to the SCHED_FIFO policy if (pthread_setschedparam(thread, SCHED_FIFO, ¶ms) != 0) { return false; } // Now verify the change in thread priority int policy = 0; if (pthread_getschedparam(thread, &policy, ¶ms) != 0) { return false; } // Check the correct policy was applied if (policy != SCHED_FIFO) { return false; } return true; } bool set_thread_core(pthread_t thread, ThreadCore core) { int num_cores = sysconf(_SC_NPROCESSORS_ONLN); if (core < 0) { return true; } if (core >= num_cores) { return false; } cpu_set_t cpuset; CPU_ZERO(&cpuset); CPU_SET(core, &cpuset); pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset); return true; }