
14-02-2014, 13:07
|
 |
 |
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
|
|
|
Re: Java Commandbase Subsystems: Init vs DefaultCommand
Quote:
Originally Posted by feverittm
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.
|