andrewm@0
|
1 /*
|
andrewm@0
|
2 * prio.cpp
|
andrewm@0
|
3 *
|
andrewm@0
|
4 * Created on: May 14, 2014
|
andrewm@0
|
5 * Author: Victor Zappi
|
andrewm@0
|
6 */
|
andrewm@0
|
7
|
andrewm@0
|
8 #include "prio.h"
|
andrewm@0
|
9 using namespace std;
|
andrewm@0
|
10 //-----------------------------------------------------------------------------------------------------------
|
andrewm@0
|
11 // set wanted real-time priority to this thread
|
andrewm@0
|
12 //-----------------------------------------------------------------------------------------------------------
|
andrewm@0
|
13 void set_realtime_priority(int order)
|
andrewm@0
|
14 {
|
andrewm@0
|
15 int ret;
|
andrewm@0
|
16
|
andrewm@0
|
17 // We'll operate on the currently running thread.
|
andrewm@0
|
18 pthread_t this_thread = pthread_self();
|
andrewm@0
|
19 // struct sched_param is used to store the scheduling priority
|
andrewm@0
|
20 struct sched_param params;
|
andrewm@0
|
21 // We'll set the priority to the maximum.
|
andrewm@0
|
22 params.sched_priority = sched_get_priority_max(SCHED_FIFO) - order;
|
andrewm@0
|
23
|
andrewm@0
|
24 // Attempt to set thread real-time priority to the SCHED_FIFO policy
|
andrewm@0
|
25 ret = pthread_setschedparam(this_thread, SCHED_FIFO, ¶ms);
|
andrewm@0
|
26 if (ret != 0) {
|
andrewm@0
|
27 // Print the error
|
andrewm@0
|
28 cout << "Unsuccessful in setting thread realtime prio" << endl;
|
andrewm@0
|
29 return;
|
andrewm@0
|
30 }
|
andrewm@0
|
31
|
andrewm@0
|
32 // Now verify the change in thread priority
|
andrewm@0
|
33 int policy = 0;
|
andrewm@0
|
34 ret = pthread_getschedparam(this_thread, &policy, ¶ms);
|
andrewm@0
|
35 if (ret != 0) {
|
andrewm@0
|
36 cout << "Couldn't retrieve real-time scheduling parameters" << endl;
|
andrewm@0
|
37 return;
|
andrewm@0
|
38 }
|
andrewm@0
|
39
|
andrewm@0
|
40 // Check the correct policy was applied
|
andrewm@0
|
41 if(policy != SCHED_FIFO) {
|
andrewm@0
|
42 cout << "Scheduling is NOT SCHED_FIFO!" << endl;
|
andrewm@0
|
43 }
|
andrewm@0
|
44 }
|
andrewm@0
|
45
|
andrewm@0
|
46 //-----------------------------------------------------------------------------------------------------------
|
andrewm@0
|
47
|
andrewm@0
|
48
|