2018-04-21 21:24:46 +08:00
|
|
|
|
#include "..\e2dtool.h"
|
2017-10-17 21:22:25 +08:00
|
|
|
|
|
2018-04-24 09:02:06 +08:00
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
e2d::Timer * e2d::Timer::getInstance()
|
|
|
|
|
|
{
|
2018-08-19 15:11:20 +08:00
|
|
|
|
static Timer instance;
|
|
|
|
|
|
return &instance;
|
2018-07-05 22:05:23 +08:00
|
|
|
|
}
|
2018-04-24 09:02:06 +08:00
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
e2d::Timer::Timer()
|
|
|
|
|
|
: _tasks()
|
2018-04-24 09:02:06 +08:00
|
|
|
|
{
|
2018-04-21 00:46:26 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
e2d::Timer::~Timer()
|
2018-04-21 00:46:26 +08:00
|
|
|
|
{
|
2017-10-17 21:22:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
void e2d::Timer::addTask(Task * task)
|
2017-10-17 21:22:25 +08:00
|
|
|
|
{
|
2018-07-05 22:05:23 +08:00
|
|
|
|
if (task)
|
|
|
|
|
|
{
|
|
|
|
|
|
auto iter = std::find(_tasks.begin(), _tasks.end(), task);
|
|
|
|
|
|
if (iter == _tasks.end())
|
|
|
|
|
|
{
|
2018-07-22 21:22:27 +08:00
|
|
|
|
task->retain();
|
2018-08-12 13:24:31 +08:00
|
|
|
|
task->_lastTime = Time::now();
|
2018-07-05 22:05:23 +08:00
|
|
|
|
_tasks.push_back(task);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-10-17 21:22:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-08-12 13:24:31 +08:00
|
|
|
|
void e2d::Timer::stopTasks(const String& name)
|
2017-10-17 21:22:25 +08:00
|
|
|
|
{
|
2018-08-12 14:30:28 +08:00
|
|
|
|
for (const auto& task : _tasks)
|
2018-04-24 09:02:06 +08:00
|
|
|
|
{
|
2018-07-05 22:05:23 +08:00
|
|
|
|
if (task->getName() == name)
|
2018-04-24 09:02:06 +08:00
|
|
|
|
{
|
2018-08-12 13:24:31 +08:00
|
|
|
|
task->stop();
|
2018-04-24 09:02:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-10-17 21:22:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-08-12 13:24:31 +08:00
|
|
|
|
void e2d::Timer::startTasks(const String& name)
|
2017-10-17 21:22:25 +08:00
|
|
|
|
{
|
2018-08-12 14:30:28 +08:00
|
|
|
|
for (const auto& task : _tasks)
|
2018-04-24 09:02:06 +08:00
|
|
|
|
{
|
2018-07-05 22:05:23 +08:00
|
|
|
|
if (task->getName() == name)
|
2018-04-24 09:02:06 +08:00
|
|
|
|
{
|
2018-08-12 13:24:31 +08:00
|
|
|
|
task->start();
|
2018-04-24 09:02:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-10-17 21:22:25 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
void e2d::Timer::removeTasks(const String& name)
|
2017-10-21 19:09:31 +08:00
|
|
|
|
{
|
2018-08-12 14:30:28 +08:00
|
|
|
|
for (const auto& task : _tasks)
|
2018-04-24 09:02:06 +08:00
|
|
|
|
{
|
2018-07-05 22:05:23 +08:00
|
|
|
|
if (task->getName() == name)
|
2018-04-24 09:02:06 +08:00
|
|
|
|
{
|
2018-07-05 22:05:23 +08:00
|
|
|
|
task->_stopped = true;
|
2018-04-24 09:02:06 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
2017-10-21 19:09:31 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-08-12 13:24:31 +08:00
|
|
|
|
void e2d::Timer::stopAllTasks()
|
2018-07-05 22:05:23 +08:00
|
|
|
|
{
|
2018-08-12 14:30:28 +08:00
|
|
|
|
for (const auto& task : _tasks)
|
2018-07-05 22:05:23 +08:00
|
|
|
|
{
|
2018-08-12 13:24:31 +08:00
|
|
|
|
task->stop();
|
2018-07-05 22:05:23 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2018-08-12 13:24:31 +08:00
|
|
|
|
void e2d::Timer::startAllTasks()
|
2017-10-21 19:09:31 +08:00
|
|
|
|
{
|
2018-08-12 14:30:28 +08:00
|
|
|
|
for (const auto& task : _tasks)
|
2018-04-24 09:02:06 +08:00
|
|
|
|
{
|
2018-08-12 13:24:31 +08:00
|
|
|
|
task->start();
|
2018-04-24 09:02:06 +08:00
|
|
|
|
}
|
2017-10-21 19:09:31 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
void e2d::Timer::removeAllTasks()
|
2017-12-04 11:18:38 +08:00
|
|
|
|
{
|
2018-08-12 14:30:28 +08:00
|
|
|
|
for (const auto& task : _tasks)
|
2018-04-24 09:02:06 +08:00
|
|
|
|
{
|
2018-07-05 22:05:23 +08:00
|
|
|
|
task->_stopped = true;
|
2018-04-24 09:02:06 +08:00
|
|
|
|
}
|
2017-12-04 11:18:38 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
void e2d::Timer::clearAllTasks()
|
2017-10-17 21:22:25 +08:00
|
|
|
|
{
|
2018-07-21 22:57:21 +08:00
|
|
|
|
if (_tasks.empty())
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
2018-08-12 14:30:28 +08:00
|
|
|
|
for (const auto& task : _tasks)
|
2018-02-07 16:37:12 +08:00
|
|
|
|
{
|
2018-07-22 21:22:27 +08:00
|
|
|
|
task->release();
|
2018-02-07 16:37:12 +08:00
|
|
|
|
}
|
2018-07-05 22:05:23 +08:00
|
|
|
|
_tasks.clear();
|
2018-04-24 09:02:06 +08:00
|
|
|
|
}
|
2017-10-17 21:22:25 +08:00
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
void e2d::Timer::update()
|
2018-04-24 09:02:06 +08:00
|
|
|
|
{
|
2018-08-19 15:11:20 +08:00
|
|
|
|
if (_tasks.empty())
|
2018-04-24 09:02:06 +08:00
|
|
|
|
return;
|
2017-10-17 21:22:25 +08:00
|
|
|
|
|
2018-08-12 15:38:02 +08:00
|
|
|
|
std::vector<Task*> currTasks;
|
2018-08-12 20:19:47 +08:00
|
|
|
|
currTasks.reserve(_tasks.size());
|
2018-08-12 15:38:02 +08:00
|
|
|
|
std::copy_if(
|
|
|
|
|
|
_tasks.begin(),
|
|
|
|
|
|
_tasks.end(),
|
|
|
|
|
|
std::back_inserter(currTasks),
|
|
|
|
|
|
[](Task* task) { return task->_isReady() && !task->_stopped; }
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (const auto& task : currTasks)
|
|
|
|
|
|
task->_update();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
for (auto iter = _tasks.begin(); iter != _tasks.end();)
|
2017-10-21 19:09:31 +08:00
|
|
|
|
{
|
2018-08-12 15:38:02 +08:00
|
|
|
|
if ((*iter)->_stopped)
|
2018-03-03 17:02:08 +08:00
|
|
|
|
{
|
2018-08-12 15:38:02 +08:00
|
|
|
|
(*iter)->release();
|
|
|
|
|
|
iter = _tasks.erase(iter);
|
2018-03-03 17:02:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
2018-08-12 15:38:02 +08:00
|
|
|
|
++iter;
|
2018-03-03 17:02:08 +08:00
|
|
|
|
}
|
2017-11-07 22:20:46 +08:00
|
|
|
|
}
|
2017-10-17 21:22:25 +08:00
|
|
|
|
}
|
2017-10-21 19:09:31 +08:00
|
|
|
|
|
2018-07-05 22:05:23 +08:00
|
|
|
|
void e2d::Timer::updateTime()
|
2017-10-21 19:09:31 +08:00
|
|
|
|
{
|
2018-08-12 14:30:28 +08:00
|
|
|
|
for (const auto& task : _tasks)
|
2017-11-08 15:23:07 +08:00
|
|
|
|
{
|
2018-08-12 13:24:31 +08:00
|
|
|
|
task->_lastTime = Time::now();
|
2017-10-21 19:09:31 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|