ReferenceCounter.cpp 653 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "ReferenceCounter.h"
  2. using namespace Framework;
  3. ReferenceCounter::ReferenceCounter()
  4. {
  5. cs = new CRITICAL_SECTION();
  6. InitializeCriticalSection(cs);
  7. ref = 1;
  8. }
  9. ReferenceCounter::~ReferenceCounter()
  10. {
  11. DeleteCriticalSection(cs);
  12. delete cs;
  13. }
  14. int ReferenceCounter::getReferenceCount() const
  15. {
  16. return ref;
  17. }
  18. ReferenceCounter* ReferenceCounter::getThis() const
  19. {
  20. EnterCriticalSection(cs);
  21. ++ref;
  22. LeaveCriticalSection(cs);
  23. return (ReferenceCounter*)this;
  24. }
  25. void* ReferenceCounter::release()
  26. {
  27. EnterCriticalSection(cs);
  28. --ref;
  29. LeaveCriticalSection(cs);
  30. if (!ref) delete this;
  31. return 0;
  32. }