ProcThreadManager.cpp 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #include "CcosThread.h"
  2. #include "ProcThreadManager.h"
  3. ProcThreadManager g_PTManager;
  4. ProcThreadManager::ProcThreadManager()
  5. {
  6. }
  7. ProcThreadManager::~ProcThreadManager()
  8. {
  9. m_ThreadMap.clear();
  10. }
  11. bool ProcThreadManager::RegistThread(PVOID p)
  12. {
  13. if (p == NULL)
  14. {
  15. return false;
  16. }
  17. DWORD Tid = GetCurrentThreadId();
  18. if (Tid != ((Ccos_Thread*)p)->GetTID())
  19. {
  20. return false;
  21. }
  22. Thread_Lock();
  23. m_ThreadMap[Tid] = p;
  24. Thread_UnLock();
  25. return true;
  26. }
  27. void ProcThreadManager::UnRegistThread(DWORD Tid)
  28. {
  29. Thread_Lock();
  30. if (m_ThreadMap.size() > 0)
  31. {
  32. map<DWORD, PVOID>::iterator iter = m_ThreadMap.find(Tid);
  33. if (iter != m_ThreadMap.end())
  34. {
  35. m_ThreadMap[Tid] = NULL;
  36. }
  37. }
  38. Thread_UnLock();
  39. }
  40. PVOID ProcThreadManager::FindThread(DWORD Tid)
  41. {
  42. //must be same Tid
  43. if (GetCurrentThreadId() != Tid)
  44. {
  45. return NULL;
  46. }
  47. PVOID pThread = NULL;
  48. Thread_Lock();
  49. if (m_ThreadMap.size() > 0)
  50. {
  51. map<DWORD, PVOID>::iterator iter = m_ThreadMap.find(Tid);
  52. if (iter != m_ThreadMap.end())
  53. {
  54. pThread = iter->second;
  55. }
  56. }
  57. Thread_UnLock();
  58. return pThread;
  59. }
  60. PVOID ProcThreadManager::GetThreadLogger(DWORD Tid)
  61. {
  62. //must be same Tid
  63. if (GetCurrentThreadId() != Tid)
  64. {
  65. return NULL;
  66. }
  67. PVOID pT = FindThread(Tid);
  68. if (pT)
  69. {
  70. return ((Ccos_Thread*)pT)->GetLogger();
  71. }
  72. return NULL;
  73. }