谁能告诉我如何在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);


问候
马迪

最佳答案

您需要查看sched_curpriority结构的sched_param成员以获取线程的当前优先级。获得与您设置的值相同的值是很正常的。您可能会合理地期望使用其他值的原因:1.您正在使用零星的调度策略; 2.线程正在处理通过MsgReceive()及其亲戚收到的消息; 3线程持有一个互斥锁,并且优先级较高的线程在同一互斥锁上被阻止。

一个示例(已修剪错误处理;第二个参数为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

09-26 06:54