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/TaskManager.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/TaskManager.h')
-rw-r--r-- | contrib/libs/poco/Foundation/include/Poco/TaskManager.h | 274 |
1 files changed, 137 insertions, 137 deletions
diff --git a/contrib/libs/poco/Foundation/include/Poco/TaskManager.h b/contrib/libs/poco/Foundation/include/Poco/TaskManager.h index 66303bb24d..3d6e7f1cc1 100644 --- a/contrib/libs/poco/Foundation/include/Poco/TaskManager.h +++ b/contrib/libs/poco/Foundation/include/Poco/TaskManager.h @@ -1,137 +1,137 @@ -// -// TaskManager.h -// -// Library: Foundation -// Package: Tasks -// Module: Tasks -// -// Definition of the TaskManager class. -// -// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Foundation_TaskManager_INCLUDED -#define Foundation_TaskManager_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Mutex.h" -#include "Poco/Task.h" -#include "Poco/AutoPtr.h" -#include "Poco/NotificationCenter.h" -#include "Poco/Timestamp.h" -#include <list> - - -namespace Poco { - - -class Notification; -class ThreadPool; -class Exception; - - -class Foundation_API TaskManager - /// The TaskManager manages a collection of tasks - /// and monitors their lifetime. - /// - /// A TaskManager has a built-in NotificationCenter that - /// is used to send out notifications on task progress - /// and task states. See the TaskNotification class and its - /// subclasses for the various events that result in a notification. - /// To keep the number of notifications small, a TaskProgressNotification - /// will only be sent out once in 100 milliseconds. -{ -public: - typedef AutoPtr<Task> TaskPtr; - typedef std::list<TaskPtr> TaskList; - - TaskManager(); - /// Creates the TaskManager, using the - /// default ThreadPool. - - TaskManager(ThreadPool& pool); - /// Creates the TaskManager, using the - /// given ThreadPool. - - ~TaskManager(); - /// Destroys the TaskManager. - - void start(Task* pTask); - /// Starts the given task in a thread obtained - /// from the thread pool. - /// - /// The TaskManager takes ownership of the Task object - /// and deletes it when it it finished. - - void cancelAll(); - /// Requests cancellation of all tasks. - - void joinAll(); - /// Waits for the completion of all the threads - /// in the TaskManager's thread pool. - /// - /// Note: joinAll() will wait for ALL tasks in the - /// TaskManager's ThreadPool to complete. If the - /// ThreadPool has threads created by other - /// facilities, these threads must also complete - /// before joinAll() can return. - - TaskList taskList() const; - /// Returns a copy of the internal task list. - - int count() const; - /// Returns the number of tasks in the internal task list. - - void addObserver(const AbstractObserver& observer); - /// Registers an observer with the NotificationCenter. - /// Usage: - /// Observer<MyClass, MyNotification> obs(*this, &MyClass::handleNotification); - /// notificationCenter.addObserver(obs); - - void removeObserver(const AbstractObserver& observer); - /// Unregisters an observer with the NotificationCenter. - - static const int MIN_PROGRESS_NOTIFICATION_INTERVAL; - -protected: - void postNotification(const Notification::Ptr& pNf); - /// Posts a notification to the task manager's - /// notification center. - - void taskStarted(Task* pTask); - void taskProgress(Task* pTask, float progress); - void taskCancelled(Task* pTask); - void taskFinished(Task* pTask); - void taskFailed(Task* pTask, const Exception& exc); - -private: - ThreadPool& _threadPool; - TaskList _taskList; - Timestamp _lastProgressNotification; - NotificationCenter _nc; - mutable FastMutex _mutex; - - friend class Task; -}; - - -// -// inlines -// -inline int TaskManager::count() const -{ - FastMutex::ScopedLock lock(_mutex); - - return (int) _taskList.size(); -} - - -} // namespace Poco - - -#endif // Foundation_TaskManager_INCLUDED +// +// TaskManager.h +// +// Library: Foundation +// Package: Tasks +// Module: Tasks +// +// Definition of the TaskManager class. +// +// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Foundation_TaskManager_INCLUDED +#define Foundation_TaskManager_INCLUDED + + +#include "Poco/Foundation.h" +#include "Poco/Mutex.h" +#include "Poco/Task.h" +#include "Poco/AutoPtr.h" +#include "Poco/NotificationCenter.h" +#include "Poco/Timestamp.h" +#include <list> + + +namespace Poco { + + +class Notification; +class ThreadPool; +class Exception; + + +class Foundation_API TaskManager + /// The TaskManager manages a collection of tasks + /// and monitors their lifetime. + /// + /// A TaskManager has a built-in NotificationCenter that + /// is used to send out notifications on task progress + /// and task states. See the TaskNotification class and its + /// subclasses for the various events that result in a notification. + /// To keep the number of notifications small, a TaskProgressNotification + /// will only be sent out once in 100 milliseconds. +{ +public: + typedef AutoPtr<Task> TaskPtr; + typedef std::list<TaskPtr> TaskList; + + TaskManager(); + /// Creates the TaskManager, using the + /// default ThreadPool. + + TaskManager(ThreadPool& pool); + /// Creates the TaskManager, using the + /// given ThreadPool. + + ~TaskManager(); + /// Destroys the TaskManager. + + void start(Task* pTask); + /// Starts the given task in a thread obtained + /// from the thread pool. + /// + /// The TaskManager takes ownership of the Task object + /// and deletes it when it it finished. + + void cancelAll(); + /// Requests cancellation of all tasks. + + void joinAll(); + /// Waits for the completion of all the threads + /// in the TaskManager's thread pool. + /// + /// Note: joinAll() will wait for ALL tasks in the + /// TaskManager's ThreadPool to complete. If the + /// ThreadPool has threads created by other + /// facilities, these threads must also complete + /// before joinAll() can return. + + TaskList taskList() const; + /// Returns a copy of the internal task list. + + int count() const; + /// Returns the number of tasks in the internal task list. + + void addObserver(const AbstractObserver& observer); + /// Registers an observer with the NotificationCenter. + /// Usage: + /// Observer<MyClass, MyNotification> obs(*this, &MyClass::handleNotification); + /// notificationCenter.addObserver(obs); + + void removeObserver(const AbstractObserver& observer); + /// Unregisters an observer with the NotificationCenter. + + static const int MIN_PROGRESS_NOTIFICATION_INTERVAL; + +protected: + void postNotification(const Notification::Ptr& pNf); + /// Posts a notification to the task manager's + /// notification center. + + void taskStarted(Task* pTask); + void taskProgress(Task* pTask, float progress); + void taskCancelled(Task* pTask); + void taskFinished(Task* pTask); + void taskFailed(Task* pTask, const Exception& exc); + +private: + ThreadPool& _threadPool; + TaskList _taskList; + Timestamp _lastProgressNotification; + NotificationCenter _nc; + mutable FastMutex _mutex; + + friend class Task; +}; + + +// +// inlines +// +inline int TaskManager::count() const +{ + FastMutex::ScopedLock lock(_mutex); + + return (int) _taskList.size(); +} + + +} // namespace Poco + + +#endif // Foundation_TaskManager_INCLUDED |