Add Delay node to Visual Scripting

This commit is contained in:
Wojtek Figat
2021-06-14 16:10:08 +02:00
parent 90105c421d
commit f5cdb0abfd
9 changed files with 170 additions and 144 deletions

View File

@@ -108,45 +108,6 @@ Task* Task::ContinueWith(Function<bool()> action, Object* target)
return ContinueWith(New<ThreadPoolActionTask>(action, target));
}
Task* Task::Delay(int32 milliseconds)
{
class DelayTask : public ThreadPoolTask
{
private:
int32 _milliseconds;
DateTime _startTimeUTC;
public:
DelayTask(int32 milliseconds)
: _milliseconds(milliseconds)
{
}
protected:
// [ThreadPoolTask]
bool Run() override
{
// Take into account the different between task enqueue (OnStart event) and the actual task execution
auto diff = DateTime::NowUTC() - _startTimeUTC;
auto ms = Math::Max(0, _milliseconds - (int32)diff.GetTotalMilliseconds());
Platform::Sleep(ms);
return false;
}
void OnStart() override
{
_startTimeUTC = DateTime::NowUTC();
}
};
return New<DelayTask>(milliseconds);
}
Task* Task::StartNew(Task* task)
{
ASSERT(task);