In the code below, I don't understand why the diference in elapsed time calculated with System.currentTimeMillis() is different tm.getCurrentThreadUserTime()

The elapsed time in millisecond is always a value like 23 or 14 while time calculated with tm.getCurrentThreadUserTime() is always 0 . I know one is milli and the other is nanosecond. Even then why is it 0?

public void animationLoop() {
        long startTime = System.currentTimeMillis();
        long currTime = startTime;

        int count = 0;
        
        ThreadMXBean tm = ManagementFactory.getThreadMXBean();
        long cpuTime = 0;
        long cpuTimeElapsed = 0;
        while (currTime - startTime < DEMO_TIME) {
            
        	long elapsedTime = System.currentTimeMillis() - currTime;
            cpuTimeElapsed = tm.getCurrentThreadUserTime() - cpuTime;
            
            //currTime += elapsedTime;
            currTime = System.currentTimeMillis();
	    	cpuTime = tm.getCurrentThreadUserTime();
            
	    	
	    	System.out.println("CPU Time: "+ cpuTimeElapsed +" Elapsed Time: "+elapsedTime);
	    	
            // update animation
            anim.update(elapsedTime);

            // draw to screen
            
            
            
            Graphics g = screen.getFullScreenWindow().getGraphics();
            draw(g);
            g.dispose();
            
            System.out.println("Iteration: "+ count+ " Elapsed time: " + elapsedTime);
            
        }

    }

This code is taken from Brackeen's Game programming in Java.

Recommended Answers

All 2 Replies

Is your OS multi tasking? Can the OS use time while your code is executing?

tm.getCurrentThreadUserTime()

What class is the tm object?

Yes its a multitasking OS.
tm is of type ThreadMXBean.

I wouldn't have been surprised if milli gave zero and nano gave nonzero value. Unfortunately its the other way round.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.