0

*** warning: Java real-time priorities >=11 not usable, using priority 10 (cause: Operation not permitted)

currently trying out a project that come out with this error message.

using Xfce environment in Vmware, eclipse ide and jamaica vm

what is actually wrong with this? The error state that the java real-time priorities is bigger than 11 when the system priority is 10, how can I set the priority higher?

my code

package realtime;
import javax.realtime.*;


class seconds extends RealtimeThread{

    int secs = 0;
    int mins = 0;
    int hours=0;


    public seconds(SchedulingParameters sched, ReleaseParameters rel)
    {
        super(sched,rel);
    }
    public void run() {
        while(true) {
            secs++;

            System.out.println("seconds" + secs);
            if(secs>58) {
                mins ++;
                secs = 0;
            }
            boolean ok = waitForNextPeriod();
        }
    }

}

class minutes extends RealtimeThread{
    private minutes min = null;
    private seconds sec = null;
    int mins = 0;
    int hours = 0;

    public minutes(SchedulingParameters sched, ReleaseParameters rel)
    {
        super(sched,rel);
    }

    public void run() {
        while(true) {
            mins++;

            System.out.println("minutes" + mins);
            if(mins>58) {
                hours ++;
                mins = 0;
            }
            boolean ok = waitForNextPeriod();
        }
    }

}

class hours extends RealtimeThread{
    private minutes min = null;
    private seconds sec = null;
    private hours hour=null;
    int mins = 0;
    int hours = 0;
    int day =0;

    public hours(SchedulingParameters sched, ReleaseParameters rel)
    {
        super(sched,rel);
    }

    public void run() {
        while(true) {
            mins++;

            System.out.println("hours" + hours);
            if(hours>24) {
                day ++;
                hours= 0;
            }
            boolean ok = waitForNextPeriod();
        }
    }

}


public class Q1 {
    private minutes min = null;
    private seconds sec = null;
    private hours hour = null;

    Q1(){
        PriorityParameters hoursched = new PriorityParameters(PriorityScheduler.instance().getMaxPriority());
        ReleaseParameters hoursrel = new PeriodicParameters(new RelativeTime(59*59*1000,1000));
        PriorityParameters minsched = new PriorityParameters(PriorityScheduler.instance().getMinPriority());
        ReleaseParameters minrel = new PeriodicParameters(new RelativeTime(59000,1000));
        PriorityParameters secsched = new PriorityParameters(PriorityScheduler.instance().getMaxPriority());
        ReleaseParameters secrel = new PeriodicParameters(new RelativeTime(1000,0));

        hour = new hours(hoursched,hoursrel);
        min = new minutes(minsched, minrel);
        sec = new seconds(secsched, secrel);

        hour.start();
        min.start();
        sec.start();
    }   

    public static void main(String[] args) {
        Q1 t = new Q1();
    }


}
4

1 回答 1

3

这是 JamaicaVM 手册中的常见问题解答:

答案说:

“操作系统不允许创建具有实时优先级的线程。相反,JamaicaVM 创建了具有正常优先级的线程。这意味着实时调度不可用,并且应用程序可能无法正常工作。

在现成的 Linux 系统上,使用实时优先级需要超级用户权限。也就是说,启动应用程序 sudo将解决问题。/etc/security/limits.conf或者,可以通过编辑和设置rtprio为使用的最大本机优先级来更改特定用户或组的优先级限制。对于 JamaicaVM 在 Linux 上使用的默认优先级映射,将rtprio 限制设置为80就足够了。”

于 2018-03-14T14:58:12.750 回答