Quote:
Originally Posted by taichichuan
Can you provide a simple example of using ::std::thread that's compatible with the roborio?
TIA,
Mike
|
From our code:
Code:
-- snip --
::frc971::wpilib::GyroSender gyro_sender;
::std::thread gyro_thread(::std::ref(gyro_sender));
// Main loop here
// Now cleanup
gyro_sender.Quit();
gyro_thread.join();
-- snip --
// Handles reading the gyro over SPI and sending out angles on a queue.
//
// This is designed to be passed into ::std::thread's constructor so it will run
// as a separate thread.
class GyroSender {
public:
GyroSender();
// For ::std::thread to call.
//
// Initializes the gyro and then loops until Quit() is called taking readings.
void operator()();
void Quit() { run_ = false; }
private:
// Readings per second.
static const int kReadingRate = 200;
GyroInterface gyro_;
::std::atomic<bool> run_{true};
};
There are a bunch of different variants for how to create the ::std::function that ::std::thread takes for a constructor. A simpler version would be to define a void foo(){} and pass that
in. You can also use ::std::bind to call arbitrary functions with arbitrary arguments.