ShareMemory_Lock.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  2. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 SHAREMEMORY_LOCK_EXPORTS
  3. // 符号编译的。在使用此 DLL 的
  4. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  5. // SHAREMEMORY_LOCK_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  6. // 符号视为是被导出的。
  7. #ifndef SHAREMEMORYLOCK_H
  8. #define SHAREMEMORYLOCK_H
  9. #ifndef SHAREMEMORY_LOCK_EXPORTS
  10. #ifdef _WIN64
  11. #ifdef _DEBUG
  12. #pragma comment(lib, "ShareMemory_LockX64D.lib")
  13. #else
  14. #pragma comment(lib, "ShareMemory_LockX64.lib")
  15. #endif
  16. #else
  17. #ifdef _DEBUG
  18. #pragma comment(lib, "ShareMemory_LockD.lib")
  19. #else
  20. #pragma comment(lib, "ShareMemory_Lock.lib")
  21. #endif
  22. #endif
  23. #endif
  24. #ifdef SHAREMEMORY_LOCK_EXPORTS
  25. #define SHAREMEMORY_LOCK_API __declspec(dllexport)
  26. #define SHAREMEMORY_LOCK_C_API extern "C" __declspec(dllexport)
  27. #else
  28. #define SHAREMEMORY_LOCK_API __declspec(dllimport)
  29. #define SHAREMEMORY_LOCK_C_API extern "C" __declspec(dllimport)
  30. #endif
  31. //#include "ShareMemory_Common.h"
  32. class SHAREMEMORY_LOCK_API CShareMemory_Lock {
  33. unsigned long m_RefCount;
  34. unsigned long volatile* m_pInterLock;
  35. HANDLE m_LockHandle;
  36. bool TryEnterCriticalSection(DWORD TryCount);
  37. void LeaveCriticalSection();
  38. public:
  39. CShareMemory_Lock(void);
  40. ~CShareMemory_Lock(void);
  41. DWORD Thread_Lock(DWORD timeout = INFINITE);
  42. void Thread_UnLock();
  43. bool ShareMemoryLock(UINT64 &SMhandle, volatile PVOID pLock, DWORD TryCount);
  44. void ShareMemoryUnLock(UINT64 &SMhandle, volatile PVOID pLock, DWORD *pRef);
  45. bool ShareMemoryAtomLock(PVOID pLock, DWORD TryCount, UINT64 & value);
  46. void ShareMemoryAtomUnLock(PVOID pLock, DWORD *pRef, UINT64 & value);
  47. bool ShareMemoryPoolLock(volatile PVOID pLock, DWORD TryCount);
  48. void ShareMemoryPoolUnLock(volatile PVOID pLock, DWORD *pRef);
  49. };
  50. #endif