/
githubmirror
/
yuzu
Обзор
Документация
Войти
/
githubmirror
/
yuzu
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/common/detached_tasks.cpp
41 строка
1004 B
lat9nq
general: Silence -Wshadow{,-uncaptured-local} warnings
19 июл 2023, 02:31
19 июл 2023, 02:31
71b3b2a
Код
Авторство
О чём код?
// SPDX-FileCopyrightText: 2018 Citra Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include <thread> #include "common/assert.h" #include "common/detached_tasks.h" namespace Common { DetachedTasks* DetachedTasks::instance = nullptr; DetachedTasks::DetachedTasks() { ASSERT(instance == nullptr); instance = this; } void DetachedTasks::WaitForAllTasks() { std::unique_lock lock{mutex}; cv.wait(lock, [this]() { return count == 0; }); } DetachedTasks::~DetachedTasks() { WaitForAllTasks(); std::unique_lock lock{mutex}; ASSERT(count == 0); instance = nullptr; } void DetachedTasks::AddTask(std::function<void()> task) { std::unique_lock lock{instance->mutex}; ++instance->count; std::thread([task_{std::move(task)}]() { task_(); std::unique_lock thread_lock{instance->mutex}; --instance->count; std::notify_all_at_thread_exit(instance->cv, std::move(thread_lock)); }).detach(); } } // namespace Common