Difference between revisions of "Device (C++)"
NateColeman (talk | contribs) (→Member functions) |
NateColeman (talk | contribs) (→Member functions) |
||
Line 19: | Line 19: | ||
|not copy assignable | |not copy assignable | ||
|- | |- | ||
− | |'''Supported commands and parameters''' | + | ! scope="row" colspan="2"|'''Supported commands and parameters''' |
|- | |- | ||
|<span style="color:#0033CC;">'''channels'''</span> | |<span style="color:#0033CC;">'''channels'''</span> |
Revision as of 10:33, 25 April 2018
Contents
Neuro::Device
Defined in header <device/device.h> |
class Device final; |
The Device class is an abstraction for NeuroMD BLE devices. This abstraction provides functions for changing of device state by executing commands and setting parameters. Each device have different sets of supported commands and parameters, Device class has functions designed to get information about these sets.
Member functions
(constructor)[private] | constructs device, inaccessible from user code, new device object could be constructed only by DeviceScanner instance |
(destructor) | destroys device |
operator=[deleted] | not copy assignable |
Supported commands and parameters | |
---|---|
channels | returns |
commands | returns |
parameters | returns |
<tbody><tr class="t-dsc">
<td></td>
<td> constructs the mutex
(public member function)
</td></tr>
<tr class="t-dsc">
<td></td>
<td> destroys the mutex
(public member function)
</td></tr>
<tr class="t-dsc">
<td></td>
<td> not copy-assignable
(public member function)
</td></tr>
<tr>
Locking
</td></tr>
<tr class="t-dsc">
<td></td>
<td> locks the mutex, blocks if the mutex is not available
(public member function)
</td></tr>
<tr class="t-dsc">
<td></td>
<td> tries to lock the mutex, returns if the mutex is not available
(public member function)
</td></tr>
<tr class="t-dsc">
<td></td>
<td> unlocks the mutex
(public member function)
</td></tr>
<tr>
Native handle
</td></tr>
<tr class="t-dsc">
<td></td>
<td> returns the underlying implementation-defined native handle object
(public member function)
</td></tr>
</tbody></table>
|}
[<a href="/mwiki/index.php?title=cpp/thread/mutex&action=edit§ion=3" title="Edit section: Notes">edit</a>] Notes
std::mutex
is usually not accessed directly: <a href="/w/cpp/thread/unique_lock" title="cpp/thread/unique lock">std::unique_lock</a>, <a href="/w/cpp/thread/lock_guard" title="cpp/thread/lock guard">std::lock_guard</a>, or std::scoped_lock (since C++17) manage locking in a more exception-safe manner.
[<a href="/mwiki/index.php?title=cpp/thread/mutex&action=edit§ion=4" title="Edit section: Example">edit</a>] Example
This example shows how a mutex
can be used to protect a <a href="/w/cpp/container/map" title="cpp/container/map">std::map</a> shared between two threads.
<span class="co2">#include <iostream></span> <span class="co2">#include <map></span> <span class="co2">#include <string></span> <span class="co2">#include <chrono></span> <span class="co2">#include <thread></span> <span class="co2">#include <mutex></span> <a href="http://en.cppreference.com/w/cpp/container/map"><span class="kw1281">std::<span class="me2">map</span></span></a><span class="sy1"><</span><a href="http://en.cppreference.com/w/cpp/string/basic_string"><span class="kw1230">std::<span class="me2">string</span></span></a>, <a href="http://en.cppreference.com/w/cpp/string/basic_string"><span class="kw1230">std::<span class="me2">string</span></span></a><span class="sy1">></span> g_pages<span class="sy4">;</span> std<span class="sy4">::</span><span class="me2">mutex</span> g_pages_mutex<span class="sy4">;</span> <span class="kw4">void</span> save_page<span class="br0">(</span><span class="kw4">const</span> <a href="http://en.cppreference.com/w/cpp/string/basic_string"><span class="kw1230">std::<span class="me2">string</span></span></a> <span class="sy3">&</span>url<span class="br0">)</span> <span class="br0">{</span> <span class="co1">// simulate a long page fetch</span> <a href="http://en.cppreference.com/w/cpp/thread/sleep_for"><span class="kw2149">std::<span class="me2">this_thread</span><span class="sy4">::</span><span class="me2">sleep_for</span></span></a><span class="br0">(</span><a href="http://en.cppreference.com/w/cpp/chrono/duration"><span class="kw997">std::<span class="me2">chrono</span><span class="sy4">::</span><span class="me2">seconds</span></span></a><span class="br0">(</span><span class="nu0">2</span><span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <a href="http://en.cppreference.com/w/cpp/string/basic_string"><span class="kw1230">std::<span class="me2">string</span></span></a> result <span class="sy1">=</span> <span class="st0">"fake content"</span><span class="sy4">;</span> <a href="http://en.cppreference.com/w/cpp/thread/lock_guard"><span class="kw2165">std::<span class="me2">lock_guard</span></span></a><span class="sy1"><</span>std<span class="sy4">::</span><span class="me2">mutex</span><span class="sy1">></span> guard<span class="br0">(</span>g_pages_mutex<span class="br0">)</span><span class="sy4">;</span> g_pages<span class="br0">[</span>url<span class="br0">]</span> <span class="sy1">=</span> result<span class="sy4">;</span> <span class="br0">}</span> <span class="kw4">int</span> main<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span> <a href="http://en.cppreference.com/w/cpp/thread/thread"><span class="kw2146">std::<span class="me2">thread</span></span></a> t1<span class="br0">(</span>save_page, <span class="st0">"http://foo"</span><span class="br0">)</span><span class="sy4">;</span> <a href="http://en.cppreference.com/w/cpp/thread/thread"><span class="kw2146">std::<span class="me2">thread</span></span></a> t2<span class="br0">(</span>save_page, <span class="st0">"http://bar"</span><span class="br0">)</span><span class="sy4">;</span> t1.<span class="me1">join</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> t2.<span class="me1">join</span><span class="br0">(</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// safe to access g_pages without lock now, as the threads are joined</span> <span class="kw1">for</span> <span class="br0">(</span><span class="kw4">const</span> <span class="kw4">auto</span> <span class="sy3">&</span>pair <span class="sy4">:</span> g_pages<span class="br0">)</span> <span class="br0">{</span> <a href="http://en.cppreference.com/w/cpp/io/cout"><span class="kw1758">std::<span class="me2">cout</span></span></a> <span class="sy1"><<</span> pair.<span class="me1">first</span> <span class="sy1"><<</span> <span class="st0">" => "</span> <span class="sy1"><<</span> pair.<span class="me1">second</span> <span class="sy1"><<</span> <span class="st0">'<span class="es1">\n</span>'</span><span class="sy4">;</span> <span class="br0">}</span> <span class="br0">}</span>
Output:
http://bar => fake content http://foo => fake content
</div>
</div>