как да намерите текущия приоритет на нишка в QNX

Може ли някой да ми каже как да намеря текущия приоритет на нишка в QNX. Бях използвал функцията pthread_getschedparam(), но това не отпечатва очакваната стойност, тъй като присвоената и текущата всъщност се виждат е една и съща.

Кодовият фрагмент е показан по-долу и l_nRetVal връща 0, което е успех.

    pthread_t thread_id = 0;
    struct sched_param  param_test;
    int l_nPolicy = -1;
    int l_nRetVal = -1;
char l_acMyPrio[20];

   memset( &param_test, 0, sizeof(param_test) );
   memset( l_acMyPrio, 0, sizeof(l_acMyPrio) );
   thread_id = pthread_self();
   l_nRetVal = pthread_getschedparam(thread_id, &l_nPolicy, &param_test);

поздрави Мади


person Maddy    schedule 31.12.2013    source източник
comment
Зададохте ли приоритета някъде? Ако не, каква е стойността, която сте очаквали да бъде и какво всъщност сте получили?   -  person Sebastian Dressler    schedule 31.12.2013
comment
Трябва да покажете малко повече код от това. Не е ясно какво настройвате и какво печатате.   -  person Duck    schedule 31.12.2013


Отговори (1)


Трябва да погледнете члена sched_curpriority на структурата sched_param, за да получите текущия приоритет на вашата нишка. Получаването на стойност, идентична на зададената от вас, е съвсем нормално. Причини, поради които може законно да очаквате различна стойност: 1. използвате спорадична политика за планиране; 2. нишката е в средата на обработка на съобщение, получено чрез MsgReceive() и неговите роднини; 3 нишката държи mutex и нишка с по-висок приоритет е блокирана на същия mutex.

Пример (с изрязана обработка на грешки; NULL за втория параметър е QNX разширение):

   struct sched_param  param_test;

   pthread_getschedparam(pthread_self(), NULL, &param_test);
   printf("assigned_priority=%d; current_priority=%d\n", param_test.sched_priority, param_test.sched_curpriority);

Друг пример в документацията на QNX: http://www.qnx.com/developers/docs/6.5.0_sp1/topic/com.qnx.doc.neutrino_lib_ref/s/sched_param.html

person maverick    schedule 31.12.2013