1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #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();
|