#include "CcosThread.h" #include "ProcThreadManager.h" ProcThreadManager g_PTManager; ProcThreadManager::ProcThreadManager() { } ProcThreadManager::~ProcThreadManager() { m_ThreadMap.clear(); } bool ProcThreadManager::RegistThread(PVOID p) { if (p == NULL) { return false; } DWORD Tid = GetCurrentThreadId(); if (Tid != ((Ccos_Thread*)p)->GetTID()) { return false; } Thread_Lock(); m_ThreadMap[Tid] = p; Thread_UnLock(); return true; } void ProcThreadManager::UnRegistThread(DWORD Tid) { Thread_Lock(); if (m_ThreadMap.size() > 0) { map::iterator iter = m_ThreadMap.find(Tid); if (iter != m_ThreadMap.end()) { m_ThreadMap[Tid] = NULL; } } Thread_UnLock(); } PVOID ProcThreadManager::FindThread(DWORD Tid) { //must be same Tid if (GetCurrentThreadId() != Tid) { return NULL; } PVOID pThread = NULL; Thread_Lock(); if (m_ThreadMap.size() > 0) { map::iterator iter = m_ThreadMap.find(Tid); if (iter != m_ThreadMap.end()) { pThread = iter->second; } } Thread_UnLock(); return pThread; } PVOID ProcThreadManager::GetThreadLogger(DWORD Tid) { //must be same Tid if (GetCurrentThreadId() != Tid) { return NULL; } PVOID pT = FindThread(Tid); if (pT) { return ((Ccos_Thread*)pT)->GetLogger(); } return NULL; }