【发布时间】:2018-04-27 21:04:57
【问题描述】:
我有一个简单的 FMX 多设备 C++ 应用程序。该应用程序有 1 个表格,没有别的。在表单的OnShow 事件中,我启动了一个我命名为StartupCode() 的函数。所有代码如下所示。
当我在 Windows 上运行应用程序时,我得到了预期的行为 - 3 条消息以正确的顺序以正确的时间弹出(例如,每个 Sleep() 仅在前一个对话框出现后才开始点击 OK 确认)。
当我在 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 的应用程序启动看门狗计时器上遇到问题。
为什么会发生这种行为?
【问题讨论】:
标签: firemonkey c++builder-10.2-tokyo