diff options
Diffstat (limited to 'include/threadengine.h')
-rw-r--r-- | include/threadengine.h | 80 |
1 files changed, 27 insertions, 53 deletions
diff --git a/include/threadengine.h b/include/threadengine.h index 20a35cb09..81b5dcd13 100644 --- a/include/threadengine.h +++ b/include/threadengine.h @@ -1,21 +1,31 @@ /* + * Anope IRC Services * - * (C) 2003-2016 Anope Team - * Contact us at team@anope.org + * Copyright (C) 2010-2016 Anope Team <team@anope.org> * - * Please read COPYING and README for further details. + * This file is part of Anope. Anope is free software; you can + * redistribute it and/or modify it under the terms of the GNU + * General Public License as published by the Free Software + * Foundation, version 2. * - * Based on the original code of Epona by Lara. - * Based on the original code of Services by Andy Church. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see see <http://www.gnu.org/licenses/>. */ -#ifndef THREADENGINE_H -#define THREADENGINE_H +#pragma once #include "sockets.h" #include "extensible.h" +#include <thread> +#include <mutex> +#include <condition_variable> -class CoreExport Thread : public Pipe, public Extensible +class CoreExport Thread : public Pipe { private: /* Set to true to tell the thread to finish and we are waiting for it */ @@ -23,7 +33,7 @@ class CoreExport Thread : public Pipe, public Extensible public: /* Handle for this thread */ - pthread_t handle; + std::thread handle; /** Threads constructor */ @@ -41,10 +51,6 @@ class CoreExport Thread : public Pipe, public Extensible */ void SetExitState(); - /** Exit the thread. Note that the thread still must be joined to free resources! - */ - void Exit(); - /** Launch the thread */ void Start(); @@ -56,65 +62,33 @@ class CoreExport Thread : public Pipe, public Extensible /** Called when this thread should be joined to */ - void OnNotify(); + void OnNotify() override; /** Called when the thread is run. */ - virtual void Run() = 0; + virtual void Run() anope_abstract; }; -class CoreExport Mutex +class Mutex { protected: - /* A mutex, used to keep threads in sync */ - pthread_mutex_t mutex; + std::mutex m; public: - /** Constructor - */ - Mutex(); - - /** Destructor - */ - ~Mutex(); - - /** Attempt to lock the mutex, will hang until a lock can be achieved - */ void Lock(); - /** Unlock the mutex, it must be locked first - */ - void Unlock(); - - /** Attempt to lock the mutex, will return true on success and false on fail - * Does not block - * @return true or false - */ bool TryLock(); + + void Unlock(); }; -class CoreExport Condition : public Mutex +class Condition : public Mutex { - private: - /* A condition */ - pthread_cond_t cond; + std::condition_variable_any cv; public: - /** Constructor - */ - Condition(); - - /** Destructor - */ - ~Condition(); - - /** Called to wakeup the waiter - */ void Wakeup(); - /** Called to wait for a Wakeup() call - */ void Wait(); }; -#endif // THREADENGINE_H |