#pragma once

#include "DataTypes.h"
#include <boost/thread.hpp>
#include <boost/chrono.hpp>

class Event{
public:
    Event()
    :signalCounter ( 0 )
    {

    }
    bool WaitForEvent( __int64 milliseconds )
    {
        boost::unique_lock<boost::mutex> lock (mutex);
        bool signal = true;
        if ( --signalCounter < 0 )
        {
            boost::system_time const timeout = boost::get_system_time() + boost::posix_time::milliseconds( milliseconds );
            signal = cond.timed_wait( lock, timeout );
            signalCounter = 0;
        }
        return signal;
    }
    void Notify()
    {
        boost::unique_lock<boost::mutex> lock (mutex);
        cond.notify_all();
        signalCounter++;
    }

private:
    boost::mutex mutex;
    boost::condition_variable_any cond;
    int signalCounter;
};

