
04-02-2016, 03:42 PM
|
 |
Software Mentor
AKA: Mike Anderson
 FRC #0116 (Epsilon Delta)
Team Role: Mentor
|
|
Join Date: Feb 2010
Rookie Year: 2010
Location: Herndon, VA
Posts: 328
|
|
|
Re: Tasks in C++
Quote:
Originally Posted by AustinSchuh
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.
|
Thanks!
Mike
|