diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2017-06-18 18:19:17 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2017-06-18 18:48:42 +0200 |
commit | e88c7b29ea9ec9fcd6ac6b15c965085152100d2e (patch) | |
tree | 6747fe7fa797e024b986ba624d05e6f59032f0ac /proto-simconnect/ftnoir_protocol_sc.cpp | |
parent | 646530b5f9ca5debe7a9b4840192e32e43f919bf (diff) |
get rid of "volatile" abuse
We heavily used "volatile bool" to check if the thread
loop should stop. But this functionality is already
provided by Qt5's QThread::requestInterruption.
In other cases, "volatile" is wonderfully
underspecified so it's better to ditch its usage in
favor of std::atomic<t>. At the time we don't appear to
be using the "volatile" keyword except when calling
win32's Interlocked*() family of functions as
necessary.
In freetrackclient's header the "volatile" qualifier
was used as part of a typedef. This doesn't work. Use
it as part of data declaration.
Diffstat (limited to 'proto-simconnect/ftnoir_protocol_sc.cpp')
-rw-r--r-- | proto-simconnect/ftnoir_protocol_sc.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/proto-simconnect/ftnoir_protocol_sc.cpp b/proto-simconnect/ftnoir_protocol_sc.cpp index 9c0f1a5b..be0c23c4 100644 --- a/proto-simconnect/ftnoir_protocol_sc.cpp +++ b/proto-simconnect/ftnoir_protocol_sc.cpp @@ -14,13 +14,13 @@ #include "opentrack-library-path.h" #include "compat/timer.hpp" -simconnect::simconnect() : hSimConnect(nullptr), should_stop(false), should_reconnect(false) +simconnect::simconnect() : hSimConnect(nullptr), should_reconnect(false) { } simconnect::~simconnect() { - should_stop = true; + requestInterruption(); wait(); } @@ -34,7 +34,7 @@ void simconnect::run() return; } - while (!should_stop) + while (!isInterruptionRequested()) { HRESULT hr; @@ -52,7 +52,7 @@ void simconnect::run() Timer tm; int idle_seconds = 0; - while (!should_stop) + while (!isInterruptionRequested()) { if (should_reconnect) { @@ -88,14 +88,15 @@ void simconnect::run() qDebug() << "simconnect: can't open handle:" << hr; } - if (!should_stop) + if (!isInterruptionRequested()) Sleep(100); } CloseHandle(event); } -void simconnect::pose( const double *headpose ) { +void simconnect::pose( const double *headpose ) +{ // euler degrees virtSCRotX = float(-headpose[Pitch]); virtSCRotY = float(headpose[Yaw]); |