我有一个简单的 FMX 多设备 C++ 应用程序。该应用程序有 1 个表格,没有别的。在表单的OnShow
事件中,我启动了一个名为 的函数StartupCode()
。所有代码如下所示。
当我在Windows上运行该应用程序时,我得到了预期的行为 - 3 条消息以正确的顺序以正确的时间弹出(例如,每条消息Sleep()
仅在通过单击确定确认前一个对话框后才开始)。
当我在iOS或Android上运行该应用程序时,我会首先弹出最后一条消息(“睡了 2 秒”),但只有在整个时间过去后(12.25 秒)。然后在单击 OK 确认后立即收到“睡眠 10 秒”消息,然后同样收到“睡眠四分之一秒”消息。
#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 的应用程序启动看门狗计时器上遇到问题。
为什么会发生这种行为?