Only send Tick messages to live threads (#1639)

This commit is contained in:
Eddy Ashton 2020-09-22 17:17:01 +01:00 коммит произвёл GitHub
Родитель 3ca2946c67
Коммит 4b4479ba54
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 21 добавлений и 18 удалений

Просмотреть файл

@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
## [Unreleased]
### Fixed
- Fixed infinite memory growth issue (#1639)
## [0.13.3] - 2020-09-18
### Added

Просмотреть файл

@ -301,27 +301,28 @@ namespace threading
task.add_task_after(std::move(msg), ms);
}
struct TickMsg
{
TickMsg(std::chrono::milliseconds elapsed_, Task& task_) :
elapsed(elapsed_),
task(task_)
{}
std::chrono::milliseconds elapsed;
Task& task;
};
static void tick_cb(std::unique_ptr<Tmsg<TickMsg>> msg)
{
msg->data.task.tick(msg->data.elapsed);
}
void tick(std::chrono::milliseconds elapsed)
{
struct TickMsg
for (auto i = 0; i < thread_count; ++i)
{
TickMsg(std::chrono::milliseconds elapsed_, Task& task_) :
elapsed(elapsed_),
task(task_)
{}
std::chrono::milliseconds elapsed;
Task& task;
};
for (auto& task : tasks)
{
auto msg = std::make_unique<Tmsg<TickMsg>>(
[](std::unique_ptr<Tmsg<TickMsg>> msg) {
msg->data.task.tick(msg->data.elapsed);
},
elapsed,
task);
auto& task = tasks[i];
auto msg = std::make_unique<Tmsg<TickMsg>>(&tick_cb, elapsed, task);
task.add_task(msg.release());
}
}