1

シンプルな FMX マルチデバイス C++ アプリがあります。アプリには 1 つのフォームがあり、他には何もありません。Form のOnShowイベントで、名前を付けた関数を開始しますStartupCode()。すべてのコードを以下に示します。

Windowsでアプリを実行すると、予想どおりの動作が得られます。3 つのメッセージが正しいタイミングで正しい順序でポップアップします (たとえばSleep()、前のダイアログ ボックスが [OK] をクリックして確認された後にのみ開始されます)。

iOSまたはAndroidでアプリを実行すると、最初に最後のメッセージ ポップアップが表示されますが ("Slept 2 sec")、時間全体が経過した後 (12.25 秒) にのみ表示されます。次に、[OK] をクリックして確認した直後に、「Slept 10 sec」というメッセージが表示され、その後も同様に「Slept Quarter sec」というメッセージが表示されます。

#include <System.SysUtils.hpp>

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
}

私は緑色で、少し学ぼうとしています。この奇妙な動作に遭遇したときに、Apple のアプリ開始ウォッチドッグ タイマーでスレッドが問題を起こすかどうかをテストしていました。

なぜこの動作が発生するのですか?

4

1 に答える 1