title: ShowMessage() behavoir in FireMonkey on iOS
body: <p>I have a simple FMX multi-device C++ app.  The app has 1 Form and nothing else.  In the Form's <code>OnShow</code> event, I initiate a function I named <code>StartupCode()</code>.  All of the code is shown below.</p>
  
  <p>When I run the app on <strong>Windows</strong>, I get expected behavior - the 3 messages pop up in the correct order with the correct timing (e.g. each <code>Sleep()</code> only starts after the previous dialog box has been acknowledged by clicking OK).</p>
  
  <p>When I run the app on <strong>iOS</strong> or <strong>Android</strong>, I get the last message popup first ("Slept 2 sec") but only after the entire time has elapsed (12.25 seconds).  Then immediately after acknowledging by clicking OK, I get the "Slept 10 sec" message, and likewise after that I get the "Slept quarter sec" message.</p>
  
  <pre><code>#include &lt;System.SysUtils.hpp&gt;
  
  void StartupCode()
  {
      Sleep(250);
      ShowMessage("Slept quarter sec");
      Sleep(10000); 
      ShowMessage("Slept 10 sec");
      Sleep(2000); 
      ShowMessage("Slept 2 sec");
  }
  
  void __fastcall TForm1::FormShow(TObject *Sender)
  {
      #if defined(_PLAT_IOS) || defined(_PLAT_ANDROID)
        TThread::ForceQueue(nullptr, [this](){StartupCode();});
      #endif
  
      #if defined(_PLAT_MSWINDOWS)
        StartupCode();
      #endif
  }
  </code></pre>
  
  <p>I'm green and just trying to learn a bit.  I was testing to see if a thread would get into trouble with Apple's app start watchdog timers when I ran into this weird behavior.  </p>
  
  <p>Why does this behavior happen?</p>