title: std::async analogue for specified thread
body: <p>I need to work with several objects, where each operation may take a lot of time.</p>
  
  <p>The processing could not be placed in a GUI (main) thread, where I start it.</p>
  
  <p>I need to make all the communications with some objects <a href="https://softwareengineering.stackexchange.com/questions/368026/architecture-for-working-with-several-devices">on asynchronous operations</a>, <strong>something similar</strong> to <a href="http://en.cppreference.com/w/cpp/thread/async" rel="nofollow noreferrer"><code>std::async</code></a> with <a href="http://en.cppreference.com/w/cpp/thread/future" rel="nofollow noreferrer"><code>std::future</code></a> or <a href="http://doc.qt.io/qt-5/qtconcurrentrun.html" rel="nofollow noreferrer"><code>QtConcurrent::run()</code></a> in my main framework (<a href="https://doc.qt.io/qt-5.10/" rel="nofollow noreferrer">Qt 5</a>), with <a href="http://doc.qt.io/qt-5/qfuture.html#details" rel="nofollow noreferrer"><code>QFuture</code></a>, etc., but it doesn't provide thread selection. I need to work with a selected object (objects == devices) in only one additional thread always,</p>
  
  <p>because: </p>
  
  <ol>
  <li>I need to make a universal solution and don't want to make each class thread-safe</li>
  <li>For example, <strong>even</strong> if make a thread-safe container for QSerialPort, <a href="http://doc.qt.io/qt-5/qserialport.html#details" rel="nofollow noreferrer">Serial port in Qt</a> cannot be accessed in more than one thread:</li>
  </ol>
  
  <blockquote>
    <p>Note: The serial port is always opened with exclusive access (that is, no other process or thread can access an already opened serial port).</p>
  </blockquote>
  
  <ol start="3">
  <li>Usually a communication with a device consists of transmit a command and receive an answer. I want to <strong>process each Answer exactly in the place where Request was sent</strong> and don't want to use event-driven-only logic.</li>
  </ol>
  
  <p>So, my question.</p>
  
  <p>How can the function be implemented?</p>
  
  <pre><code>MyFuture&lt;T&gt; fut = myAsyncStart(func, &amp;specificLiveThread);
  </code></pre>
  
  <p>It is necessary that one live thread can be passed many times.</p>