#include "stdafx.h" #include "Emu/Memory/Memory.h" #include "Emu/System.h" #include "Emu/IdManager.h" #include "Emu/Cell/PPUThread.h" #include "Emu/Cell/SPUThread.h" #include "Emu/Cell/RawSPUThread.h" #include "Emu/ARMv7/ARMv7Thread.h" #include "CPUThreadManager.h" CPUThreadManager::CPUThreadManager() { } CPUThreadManager::~CPUThreadManager() { } void CPUThreadManager::Close() { std::lock_guard lock(m_mutex); for (auto& x : m_raw_spu) { x.reset(); } } std::vector> CPUThreadManager::GetAllThreads() { std::vector> result; for (auto& t : idm::get_all()) { result.emplace_back(t); } for (auto& t : idm::get_all()) { result.emplace_back(t); } for (auto& t : idm::get_all()) { result.emplace_back(t); } for (auto& t : idm::get_all()) { result.emplace_back(t); } return result; } void CPUThreadManager::Exec() { for (auto& t : idm::get_all()) { t->exec(); } for (auto& t : idm::get_all()) { t->exec(); } } std::shared_ptr CPUThreadManager::NewRawSPUThread() { std::lock_guard lock(m_mutex); std::shared_ptr result; for (u32 i = 0; i < m_raw_spu.size(); i++) { if (m_raw_spu[i].expired()) { m_raw_spu[i] = result = idm::make_ptr(std::to_string(i), i); break; } } return result; } std::shared_ptr CPUThreadManager::GetRawSPUThread(u32 index) { if (index >= m_raw_spu.size()) { return nullptr; } std::lock_guard lock(m_mutex); return m_raw_spu[index].lock(); }