Java-Gaming.org Hi !
Featured games (81)
games approved by the League of Dukes
Games in Showcase (513)
Games in Android Showcase (119)
games submitted by our members
Games in WIP (576)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Dummy statement needed, else code won't run  (Read 1986 times)
0 Members and 1 Guest are viewing this topic.
Offline Aeroren

Senior Newbie


Medals: 1



« Posted 2010-12-01 14:07:04 »

Can anyone figure out why the code below only works if I add a dummy statement in the loop? Sleep(0) also works, but without any statement it simply wont run (ie. the update method on the updatable isn't called), no errors are given.

The ticking boolean is always true (insterted if i ever wish to pause the routine), updateNextCycle and msPassed are set by the main game loop. (the reason this is in a thread is because I don't want the game loop to wait for the update method to complete. Busy is used to indicate to the main loop that the previous update isn't ready yet).

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
    @Override
    public void run() {
        while(ticking) {
            int i = 0; //@todo figure out why this is needed
            if (updateNextCycle) {
                busy = true;
                updateNextCycle = false;
                updatable.update(msPassed);
                busy = false;
            }
        }
    }
Offline dbotha

Senior Newbie





« Reply #1 - Posted 2010-12-01 14:21:22 »

This seems like a very odd way to structure things, for one your thread is going to sit in a tight loop needlessly consuming CPU cycles. Its not apparent what your intentions are so I assume you want it this way, however as you mention you have a separate thread that runs the main game loop I would suggest that this is not a good idea. I would put your problem down to a threading issue, is updateNextCycle declared volatile? How are you modifying it from the main game thread?
Offline cylab

JGO Ninja


Medals: 52



« Reply #2 - Posted 2010-12-01 14:30:26 »

You probably eat up all the available cpu on a single cpu system or the loop completely runs in the cache of a multi-cpu system. As dbotha points out, you must either synchronize access to variables from multiple threads or declare all your shared flags volatile. The latter afaik only realiably works for booleans and only from java 1.5 onwards.

Refer to some documentation about thread safety like e.g. this http://www.javamex.com/tutorials/threads/thread_safety.shtml

Mathias - I Know What [you] Did Last Summer!
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Aeroren

Senior Newbie


Medals: 1



« Reply #3 - Posted 2010-12-01 14:47:11 »

In the future the updatable will be on another machine and the method is called through RMI (i know, not the best idea, but the assignment was to write a multiplayer game using RMI). I don't want the game loop to wait for a failing RMI call, so that's why all this is in a separate thread. The thread has a setter to change updateNextCycle which first checks if (!busy).

But you're right about the locked CPU thing. I didn't really think this through Smiley Anyway, it works now, ty Smiley
Offline Eli Delventhal

JGO Kernel


Medals: 42
Projects: 11
Exp: 10 years


Game Engineer


« Reply #4 - Posted 2010-12-01 17:17:29 »

In the future the updatable will be on another machine and the method is called through RMI (i know, not the best idea, but the assignment was to write a multiplayer game using RMI). I don't want the game loop to wait for a failing RMI call, so that's why all this is in a separate thread. The thread has a setter to change updateNextCycle which first checks if (!busy).

But you're right about the locked CPU thing. I didn't really think this through Smiley Anyway, it works now, ty Smiley
It's still a good idea to have your thread yield/sleep when you don't need it to be going full blast. Otherwise, you're going to use 100% of the CPU when you don't need it.

See my work:
OTC Software
Offline Riven
« League of Dukes »

JGO Overlord


Medals: 816
Projects: 4
Exp: 16 years


Hand over your head.


« Reply #5 - Posted 2010-12-01 17:36:18 »

With RMI, you can sleep on the remote machine Smiley

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

Longarmx (41 views)
2014-10-17 03:59:02

Norakomi (33 views)
2014-10-16 15:22:06

Norakomi (26 views)
2014-10-16 15:20:20

lcass (30 views)
2014-10-15 16:18:58

TehJavaDev (59 views)
2014-10-14 00:39:48

TehJavaDev (60 views)
2014-10-14 00:35:47

TehJavaDev (50 views)
2014-10-14 00:32:37

BurntPizza (66 views)
2014-10-11 23:24:42

BurntPizza (38 views)
2014-10-11 23:10:45

BurntPizza (80 views)
2014-10-11 22:30:10
Understanding relations between setOrigin, setScale and setPosition in libGdx
by mbabuskov
2014-10-09 22:35:00

Definite guide to supporting multiple device resolutions on Android (2014)
by mbabuskov
2014-10-02 22:36:02

List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50

List of Learning Resources
by SilverTiger
2014-07-31 16:26:06
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!