#pragma once // 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 DIOSLOCK_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // DIOSLOCK_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifndef DIOSLOCK_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "DiosLockX64D.lib") #else #pragma comment(lib, "DiosLockX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "DiosLockD.lib") #else #pragma comment(lib, "DiosLock.lib") #endif #endif #endif #ifdef DIOSLOCK_EXPORTS #define DIOSLOCK_API __declspec(dllexport) #define DIOSLOCK_C_API extern "C" __declspec(dllexport) #else #define DIOSLOCK_API __declspec(dllimport) #define DIOSLOCK_C_API extern "C" __declspec(dllimport) #endif class DIOSLOCK_API DiosLock { //DWORD m_LockTime; protected: DWORD m_LockThreadId; //volatile LONG m_ProcLock; volatile unsigned long m_RefCount; volatile unsigned long m_InterLock; HANDLE m_LockHandle; bool DiosInternal_EnterCriticalSection(DWORD TryCount); void DiosInternal_LeaveCriticalSection(); bool Try_Clear_DeadThread(); INT FindProcessThreads(DWORD dwOwnerTID); DWORD Thread_WaitUnlockNotify(DWORD timeout = INFINITE); public: DiosLock(void); virtual ~DiosLock(void); DWORD Thread_Lock(DWORD timeout = INFINITE); void Thread_UnLock(); bool Thread_Clear(DWORD Tid); //DWORD Machine_Lock(DWORD timeout); //DWORD Machine_UnLock(); //DWORD Group_Lock(DWORD timeout); //DWORD Group_UnLock(); }; DIOSLOCK_C_API void CleanupForThread(DWORD Tid); #pragma warning( push ) #pragma warning( disable : 4114 ) DIOSLOCK_C_API bool Dios_ThreadLock(volatile UINT64 volatile *pLock); DIOSLOCK_C_API void Dios_ThreadUnLock(volatile UINT64 volatile *pLock); DIOSLOCK_C_API void Dios_ThreadClearForTid(volatile UINT64 volatile *pLock, DWORD Tid); #pragma warning( pop ) DIOSLOCK_C_API DWORD Proc_Lock(DWORD timeout); DIOSLOCK_C_API void Proc_UnLock(); DIOSLOCK_C_API DWORD Thread_GetUniqTick();