#include<hgl/thread/ThreadMutex.h>

#include<wchar.h>

#pragma warning(disable:4800)            // BOOL -> bool 性能损失警告
namespace hgl
{
    ThreadMutex::ThreadMutex()
    {
        InitializeCriticalSection(&ptr);
    }

    ThreadMutex::~ThreadMutex()
    {
        Unlock();

        DeleteCriticalSection(&ptr);
    }

    /**
    * 取得控制权
    * 如果对象处于排斥状态，则等待
    */
    void ThreadMutex::Lock()
    {
        EnterCriticalSection(&ptr);
    }

    /**
    * 尝试取得控制权
    * @return 是否成功取得控制权
    */
    bool ThreadMutex::TryLock()
    {
        return(TryEnterCriticalSection(&ptr));
    }

    /**
    * 等待并取得控制权
    * @param time 等待的最大时间,时间为0表示尝试
    * @return 是否取得控制权
    */
    bool ThreadMutex::WaitLock(double time_out)
    {
        return(!WaitForSingleObject(&ptr,time_out*1000));
    }

    /**
    * 放弃控制权
    */
    void ThreadMutex::Unlock()
    {
        LeaveCriticalSection(&ptr);
    }
}//namespace hgl
