@ -2,6 +2,7 @@
// Licensed under GPLv2 or any later version
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
// Refer to the license.txt file included.
# include <atomic>
# include <chrono>
# include <chrono>
# include <cmath>
# include <cmath>
# include <thread>
# include <thread>
@ -20,13 +21,16 @@ public:
: up ( std : : move ( up_ ) ) , down ( std : : move ( down_ ) ) , left ( std : : move ( left_ ) ) ,
: up ( std : : move ( up_ ) ) , down ( std : : move ( down_ ) ) , left ( std : : move ( left_ ) ) ,
right ( std : : move ( right_ ) ) , modifier ( std : : move ( modifier_ ) ) , modifier_scale ( modifier_scale_ ) ,
right ( std : : move ( right_ ) ) , modifier ( std : : move ( modifier_ ) ) , modifier_scale ( modifier_scale_ ) ,
modifier_angle ( modifier_angle_ ) {
modifier_angle ( modifier_angle_ ) {
update_thread_running . store ( true ) ;
update_thread = std : : thread ( & Analog : : UpdateStatus , this ) ;
update_thread = std : : thread ( & Analog : : UpdateStatus , this ) ;
}
}
~ Analog ( ) override {
~ Analog ( ) override {
update_thread_running = false ;
if ( update_thread_running . load ( ) ) {
if ( update_thread . joinable ( ) ) {
update_thread_running . store ( false ) ;
update_thread . join ( ) ;
if ( update_thread . joinable ( ) ) {
update_thread . join ( ) ;
}
}
}
}
}
@ -58,7 +62,7 @@ public:
}
}
void UpdateStatus ( ) {
void UpdateStatus ( ) {
while ( update_thread_running ) {
while ( update_thread_running .load ( ) ) {
const float coef = modifier - > GetStatus ( ) ? modifier_scale : 1.0f ;
const float coef = modifier - > GetStatus ( ) ? modifier_scale : 1.0f ;
bool r = right - > GetStatus ( ) ;
bool r = right - > GetStatus ( ) ;
@ -160,7 +164,7 @@ private:
float angle { } ;
float angle { } ;
float amplitude { } ;
float amplitude { } ;
std : : thread update_thread ;
std : : thread update_thread ;
bool update_thread_running { true } ;
std : : atomic < bool > update_thread_running { } ;
} ;
} ;
std : : unique_ptr < Input : : AnalogDevice > AnalogFromButton : : Create ( const Common : : ParamPackage & params ) {
std : : unique_ptr < Input : : AnalogDevice > AnalogFromButton : : Create ( const Common : : ParamPackage & params ) {