diff options
author | orivej <orivej@yandex-team.ru> | 2022-02-10 16:45:01 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:01 +0300 |
commit | 2d37894b1b037cf24231090eda8589bbb44fb6fc (patch) | |
tree | be835aa92c6248212e705f25388ebafcf84bc7a1 /contrib/libs/poco/Foundation/include/Poco/Activity.h | |
parent | 718c552901d703c502ccbefdfc3c9028d608b947 (diff) | |
download | ydb-2d37894b1b037cf24231090eda8589bbb44fb6fc.tar.gz |
Restoring authorship annotation for <orivej@yandex-team.ru>. Commit 2 of 2.
Diffstat (limited to 'contrib/libs/poco/Foundation/include/Poco/Activity.h')
-rw-r--r-- | contrib/libs/poco/Foundation/include/Poco/Activity.h | 414 |
1 files changed, 207 insertions, 207 deletions
diff --git a/contrib/libs/poco/Foundation/include/Poco/Activity.h b/contrib/libs/poco/Foundation/include/Poco/Activity.h index 4f0359ea1e..a7297f144f 100644 --- a/contrib/libs/poco/Foundation/include/Poco/Activity.h +++ b/contrib/libs/poco/Foundation/include/Poco/Activity.h @@ -1,208 +1,208 @@ -// -// Activity.h -// -// Library: Foundation -// Package: Threading -// Module: ActiveObjects -// -// Definition of the Activity template class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Foundation_Activity_INCLUDED -#define Foundation_Activity_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/RunnableAdapter.h" -#include "Poco/ThreadPool.h" -#include "Poco/Event.h" -#include "Poco/Mutex.h" - - -namespace Poco { - - -template <class C> -class Activity: public Runnable - /// This template class helps to implement active objects. - /// An active object uses threads to decouple method - /// execution from method invocation, or to perform tasks - /// autonomously, without intervention of a caller. - /// - /// An activity is a (typically longer running) method - /// that executes within its own task. Activities can - /// be started automatically (upon object construction) - /// or manually at a later time. Activities can also - /// be stopped at any time. However, to make stopping - /// an activity work, the method implementing the - /// activity has to check periodically whether it - /// has been requested to stop, and if so, return. - /// Activities are stopped before the object they belong to is - /// destroyed. Methods implementing activities cannot have arguments - /// or return values. - /// - /// Activity objects are used as follows: - /// - /// class ActiveObject - /// { - /// public: - /// ActiveObject(): - /// _activity(this, &ActiveObject::runActivity) - /// { - /// ... - /// } - /// - /// ... +// +// Activity.h +// +// Library: Foundation +// Package: Threading +// Module: ActiveObjects +// +// Definition of the Activity template class. +// +// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Foundation_Activity_INCLUDED +#define Foundation_Activity_INCLUDED + + +#include "Poco/Foundation.h" +#include "Poco/RunnableAdapter.h" +#include "Poco/ThreadPool.h" +#include "Poco/Event.h" +#include "Poco/Mutex.h" + + +namespace Poco { + + +template <class C> +class Activity: public Runnable + /// This template class helps to implement active objects. + /// An active object uses threads to decouple method + /// execution from method invocation, or to perform tasks + /// autonomously, without intervention of a caller. + /// + /// An activity is a (typically longer running) method + /// that executes within its own task. Activities can + /// be started automatically (upon object construction) + /// or manually at a later time. Activities can also + /// be stopped at any time. However, to make stopping + /// an activity work, the method implementing the + /// activity has to check periodically whether it + /// has been requested to stop, and if so, return. + /// Activities are stopped before the object they belong to is + /// destroyed. Methods implementing activities cannot have arguments + /// or return values. + /// + /// Activity objects are used as follows: + /// + /// class ActiveObject + /// { + /// public: + /// ActiveObject(): + /// _activity(this, &ActiveObject::runActivity) + /// { + /// ... + /// } /// - /// protected: - /// void runActivity() - /// { - /// while (!_activity.isStopped()) - /// { - /// ... - /// } - /// } - /// - /// private: - /// Activity<ActiveObject> _activity; - /// }; -{ -public: - typedef RunnableAdapter<C> RunnableAdapterType; - typedef typename RunnableAdapterType::Callback Callback; - - Activity(C* pOwner, Callback method): - _pOwner(pOwner), - _runnable(*pOwner, method), - _stopped(true), - _running(false), - _done(false) - /// Creates the activity. Call start() to - /// start it. - { - poco_check_ptr (pOwner); - } - - ~Activity() - /// Stops and destroys the activity. - { - try - { - stop(); - wait(); - } - catch (...) - { - poco_unexpected(); - } - } - - void start() - /// Starts the activity by acquiring a - /// thread for it from the default thread pool. - { - start(ThreadPool::defaultPool()); - } - - void start(ThreadPool& pool) - { - FastMutex::ScopedLock lock(_mutex); - - if (!_running) - { - _done.reset(); - _stopped = false; - _running = true; - try - { - pool.start(*this); - } - catch (...) - { - _running = false; - throw; - } - } - } - - void stop() - /// Requests to stop the activity. - { - FastMutex::ScopedLock lock(_mutex); - - _stopped = true; - } - - void wait() - /// Waits for the activity to complete. - { - if (_running) - { - _done.wait(); - } - } - - void wait(long milliseconds) - /// Waits the given interval for the activity to complete. - /// An TimeoutException is thrown if the activity does not - /// complete within the given interval. - { - if (_running) - { - _done.wait(milliseconds); - } - } - - bool isStopped() const - /// Returns true if the activity has been requested to stop. - { - return _stopped; - } - - bool isRunning() const - /// Returns true if the activity is running. - { - return _running; - } - -protected: - void run() - { - try - { - _runnable.run(); - } - catch (...) - { - _running = false; - _done.set(); - throw; - } - _running = false; - _done.set(); - } - -private: - Activity(); - Activity(const Activity&); - Activity& operator = (const Activity&); - - C* _pOwner; - RunnableAdapterType _runnable; - volatile bool _stopped; - volatile bool _running; - Event _done; - FastMutex _mutex; -}; - - -} // namespace Poco - - -#endif // Foundation_Activity_INCLUDED + /// ... + /// + /// protected: + /// void runActivity() + /// { + /// while (!_activity.isStopped()) + /// { + /// ... + /// } + /// } + /// + /// private: + /// Activity<ActiveObject> _activity; + /// }; +{ +public: + typedef RunnableAdapter<C> RunnableAdapterType; + typedef typename RunnableAdapterType::Callback Callback; + + Activity(C* pOwner, Callback method): + _pOwner(pOwner), + _runnable(*pOwner, method), + _stopped(true), + _running(false), + _done(false) + /// Creates the activity. Call start() to + /// start it. + { + poco_check_ptr (pOwner); + } + + ~Activity() + /// Stops and destroys the activity. + { + try + { + stop(); + wait(); + } + catch (...) + { + poco_unexpected(); + } + } + + void start() + /// Starts the activity by acquiring a + /// thread for it from the default thread pool. + { + start(ThreadPool::defaultPool()); + } + + void start(ThreadPool& pool) + { + FastMutex::ScopedLock lock(_mutex); + + if (!_running) + { + _done.reset(); + _stopped = false; + _running = true; + try + { + pool.start(*this); + } + catch (...) + { + _running = false; + throw; + } + } + } + + void stop() + /// Requests to stop the activity. + { + FastMutex::ScopedLock lock(_mutex); + + _stopped = true; + } + + void wait() + /// Waits for the activity to complete. + { + if (_running) + { + _done.wait(); + } + } + + void wait(long milliseconds) + /// Waits the given interval for the activity to complete. + /// An TimeoutException is thrown if the activity does not + /// complete within the given interval. + { + if (_running) + { + _done.wait(milliseconds); + } + } + + bool isStopped() const + /// Returns true if the activity has been requested to stop. + { + return _stopped; + } + + bool isRunning() const + /// Returns true if the activity is running. + { + return _running; + } + +protected: + void run() + { + try + { + _runnable.run(); + } + catch (...) + { + _running = false; + _done.set(); + throw; + } + _running = false; + _done.set(); + } + +private: + Activity(); + Activity(const Activity&); + Activity& operator = (const Activity&); + + C* _pOwner; + RunnableAdapterType _runnable; + volatile bool _stopped; + volatile bool _running; + Event _done; + FastMutex _mutex; +}; + + +} // namespace Poco + + +#endif // Foundation_Activity_INCLUDED |