DiosLock.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #pragma once
  2. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  3. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DIOSLOCK_EXPORTS
  4. // 符号编译的。在使用此 DLL 的
  5. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  6. // DIOSLOCK_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  7. // 符号视为是被导出的。
  8. #ifndef DIOSLOCK_EXPORTS
  9. #ifdef _WIN64
  10. #ifdef _DEBUG
  11. #pragma comment(lib, "Dios.Dev.LockX64D.lib")
  12. #else
  13. #pragma comment(lib, "Dios.Dev.LockX64.lib")
  14. #endif
  15. #else
  16. #ifdef _DEBUG
  17. #pragma comment(lib, "Dios.Dev.LockD.lib")
  18. #else
  19. #pragma comment(lib, "Dios.Dev.Lock.lib")
  20. #endif
  21. #endif
  22. #endif
  23. #ifdef DIOSLOCK_EXPORTS
  24. #define DIOSLOCK_API __declspec(dllexport)
  25. #define DIOSLOCK_C_API extern "C" __declspec(dllexport)
  26. #else
  27. #define DIOSLOCK_API __declspec(dllimport)
  28. #define DIOSLOCK_C_API extern "C" __declspec(dllimport)
  29. #endif
  30. class DIOSLOCK_API DiosLock {
  31. //DWORD m_LockTime;
  32. //DWORD m_LockThreadId;
  33. //volatile LONG m_ProcLock;
  34. volatile unsigned long m_RefCount;
  35. volatile unsigned long m_InterLock;
  36. HANDLE m_LockHandle;
  37. bool DiosInternal_EnterCriticalSection(DWORD TryCount);
  38. void DiosInternal_LeaveCriticalSection();
  39. bool Try_Clear_DeadThread();
  40. INT FindProcessThreads(DWORD dwOwnerTID);
  41. DWORD Thread_WaitUnlockNotify(DWORD timeout = INFINITE);
  42. public:
  43. DiosLock(void);
  44. virtual ~DiosLock(void);
  45. DWORD Thread_Lock(DWORD timeout = INFINITE);
  46. void Thread_UnLock();
  47. bool Thread_Clear(DWORD Tid);
  48. //DWORD Machine_Lock(DWORD timeout);
  49. //DWORD Machine_UnLock();
  50. //DWORD Group_Lock(DWORD timeout);
  51. //DWORD Group_UnLock();
  52. };
  53. DIOSLOCK_C_API void CleanupForThread(DWORD Tid);
  54. #pragma warning( push )
  55. #pragma warning( disable : 4114 )
  56. DIOSLOCK_C_API bool Dios_ThreadLock(volatile UINT64 volatile *pLock);
  57. DIOSLOCK_C_API void Dios_ThreadUnLock(volatile UINT64 volatile *pLock);
  58. DIOSLOCK_C_API void Dios_ThreadClearForTid(volatile UINT64 volatile *pLock, DWORD Tid);
  59. #pragma warning( pop )
  60. DIOSLOCK_C_API DWORD Proc_Lock(DWORD timeout);
  61. DIOSLOCK_C_API void Proc_UnLock();
  62. DIOSLOCK_C_API DWORD Thread_GetUniqTick();