View Single Post
  #2   Spotlight this post!  
Unread 14-02-2014, 13:07
notmattlythgoe's Avatar
notmattlythgoe notmattlythgoe is online now
Flywheel Police
AKA: Matthew Lythgoe
FRC #2363 (Triple Helix)
Team Role: Mentor
 
Join Date: Feb 2010
Rookie Year: 2009
Location: Newport News, VA
Posts: 1,722
notmattlythgoe has a reputation beyond reputenotmattlythgoe has a reputation beyond reputenotmattlythgoe has a reputation beyond reputenotmattlythgoe has a reputation beyond reputenotmattlythgoe has a reputation beyond reputenotmattlythgoe has a reputation beyond reputenotmattlythgoe has a reputation beyond reputenotmattlythgoe has a reputation beyond reputenotmattlythgoe has a reputation beyond reputenotmattlythgoe has a reputation beyond reputenotmattlythgoe has a reputation beyond repute
Re: Java Commandbase Subsystems: Init vs DefaultCommand

Quote:
Originally Posted by feverittm View Post
Here is a question for all you Java types:

Which (if either) way is 'better' (less intensive on the cRIO, easier to understand, etc).

In a command based template we have a compressor subsystem.

We could start the compressor (using the standard compressor.start() method) in the subsystems initialization call. We could also just create a simple command that just does a compressor.start() in its execute function and then call this as the compressor subsystem's default command.

Code:
    public subcompressor(int compressorSwitchSlot, int compressorSpikeSlot) {
        myCompressor = new Compressor(compressorSwitchSlot, compressorSpikeSlot);
        LiveWindow.addActuator("compressor", "compressor", myCompressor);
        myCompressor.start();
    }
or

Code:
    public subcompressor(int compressorSwitchSlot, int compressorSpikeSlot) {
        myCompressor = new Compressor(compressorSwitchSlot, compressorSpikeSlot);
        LiveWindow.addActuator("compressor", "compressor", myCompressor);
    }

    /**
     * Default command is to start the compressor.  Doing it this way instead
     * of in the initializer will put it in a separate thread and not lock the
     * main control thread.
     */

    public void initDefaultCommand() {
        setDefaultCommand(new StartCompressor());
    }
Is one way better then the other? Do both ways use separate threads from the main thread?

Just cleaning up code and wondering.

Thanks
We actually just create and start the compressor either in RobotTemplate or in CommandBase. But neither of those will use separate threads, the Command Based structure uses a Scheduler that runs on a single thread to execute all of the commands.
Reply With Quote