vnpy/vn.api/vn.ib/ibapi/windows/client/EMutex.cpp

60 lines
1.2 KiB
C++

/* Copyright (C) 2013 Interactive Brokers LLC. All rights reserved. This code is subject to the terms
* and conditions of the IB API Non-Commercial License or the IB API Commercial License, as applicable. */
#include "StdAfx.h"
#include "EMutex.h"
EMutex::EMutex()
{
#if defined(IB_POSIX)
pthread_mutex_init(&cs, NULL);
#elif defined(IB_WIN32)
InitializeCriticalSection(&cs);
#else
# error "Not implemented on this platform"
#endif
}
EMutex::~EMutex(void)
{
Leave();
#if defined(IB_POSIX)
pthread_mutex_destroy(&cs);
#elif defined(IB_WIN32)
DeleteCriticalSection(&cs);
#else
# error "Not implemented on this platform"
#endif
}
bool EMutex::TryEnter()
{
#if defined(IB_POSIX)
return pthread_mutex_trylock(&cs) == 0;
#elif defined(IB_WIN32)
return TryEnterCriticalSection(&cs);
#else
# error "Not implemented on this platform"
#endif
}
void EMutex::Enter() {
#if defined(IB_POSIX)
pthread_mutex_lock(&cs);
#elif defined(IB_WIN32)
EnterCriticalSection(&cs);
#else
# error "Not implemented on this platform"
#endif
}
void EMutex::Leave() {
#if defined(IB_POSIX)
pthread_mutex_unlock(&cs);
#elif defined(IB_WIN32)
LeaveCriticalSection(&cs);
#else
# error "Not implemented on this platform"
#endif
}