Merge pull request #5846 from ameerj/analog-join

analog_from_button: Fix update_thread.join exception
This commit is contained in:
Morph 2021-01-31 23:06:06 +08:00 committed by GitHub
commit f7dc77e03a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

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