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/TimedNotificationQueue.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/TimedNotificationQueue.h')
-rw-r--r-- | contrib/libs/poco/Foundation/include/Poco/TimedNotificationQueue.h | 286 |
1 files changed, 143 insertions, 143 deletions
diff --git a/contrib/libs/poco/Foundation/include/Poco/TimedNotificationQueue.h b/contrib/libs/poco/Foundation/include/Poco/TimedNotificationQueue.h index f3e0f21019..841ace6b0a 100644 --- a/contrib/libs/poco/Foundation/include/Poco/TimedNotificationQueue.h +++ b/contrib/libs/poco/Foundation/include/Poco/TimedNotificationQueue.h @@ -1,143 +1,143 @@ -// -// TimedNotificationQueue.h -// -// Library: Foundation -// Package: Notifications -// Module: TimedNotificationQueue -// -// Definition of the TimedNotificationQueue class. -// -// Copyright (c) 2009, Applied Informatics Software Engineering GmbH. -// and Contributors. -// -// SPDX-License-Identifier: BSL-1.0 -// - - -#ifndef Foundation_TimedNotificationQueue_INCLUDED -#define Foundation_TimedNotificationQueue_INCLUDED - - -#include "Poco/Foundation.h" -#include "Poco/Notification.h" -#include "Poco/Mutex.h" -#include "Poco/Event.h" -#include "Poco/Timestamp.h" -#include "Poco/Clock.h" -#include <map> - - -namespace Poco { - - -class Foundation_API TimedNotificationQueue - /// A TimedNotificationQueue object provides a way to implement timed, asynchronous - /// notifications. This is especially useful for sending notifications - /// from one thread to another, for example from a background thread to - /// the main (user interface) thread. - /// - /// The TimedNotificationQueue is quite similar to the NotificationQueue class. - /// The only difference to NotificationQueue is that each Notification is tagged - /// with a Timestamp. When inserting a Notification into the queue, the - /// Notification is inserted according to the given Timestamp, with - /// lower Timestamp values being inserted before higher ones. - /// - /// Notifications are dequeued in order of their timestamps. - /// - /// TimedNotificationQueue has some restrictions regarding multithreaded use. - /// While multiple threads may enqueue notifications, only one thread at a - /// time may dequeue notifications from the queue. - /// - /// If two threads try to dequeue a notification simultaneously, the results - /// are undefined. -{ -public: - TimedNotificationQueue(); - /// Creates the TimedNotificationQueue. - - ~TimedNotificationQueue(); - /// Destroys the TimedNotificationQueue. - - void enqueueNotification(Notification::Ptr pNotification, Timestamp timestamp); - /// Enqueues the given notification by adding it to - /// the queue according to the given timestamp. - /// Lower timestamp values are inserted before higher ones. - /// The queue takes ownership of the notification, thus - /// a call like - /// notificationQueue.enqueueNotification(new MyNotification, someTime); - /// does not result in a memory leak. - /// - /// The Timestamp is converted to an equivalent Clock value. - - void enqueueNotification(Notification::Ptr pNotification, Clock clock); - /// Enqueues the given notification by adding it to - /// the queue according to the given clock value. - /// Lower clock values are inserted before higher ones. - /// The queue takes ownership of the notification, thus - /// a call like - /// notificationQueue.enqueueNotification(new MyNotification, someTime); - /// does not result in a memory leak. - - Notification* dequeueNotification(); - /// Dequeues the next pending notification with a timestamp - /// less than or equal to the current time. - /// Returns 0 (null) if no notification is available. - /// The caller gains ownership of the notification and - /// is expected to release it when done with it. - /// - /// It is highly recommended that the result is immediately - /// assigned to a Notification::Ptr, to avoid potential - /// memory management issues. - - Notification* waitDequeueNotification(); - /// Dequeues the next pending notification. - /// If no notification is available, waits for a notification - /// to be enqueued. - /// The caller gains ownership of the notification and - /// is expected to release it when done with it. - /// - /// It is highly recommended that the result is immediately - /// assigned to a Notification::Ptr, to avoid potential - /// memory management issues. - - Notification* waitDequeueNotification(long milliseconds); - /// Dequeues the next pending notification. - /// If no notification is available, waits for a notification - /// to be enqueued up to the specified time. - /// Returns 0 (null) if no notification is available. - /// The caller gains ownership of the notification and - /// is expected to release it when done with it. - /// - /// It is highly recommended that the result is immediately - /// assigned to a Notification::Ptr, to avoid potential - /// memory management issues. - - bool empty() const; - /// Returns true iff the queue is empty. - - int size() const; - /// Returns the number of notifications in the queue. - - void clear(); - /// Removes all notifications from the queue. - /// - /// Calling clear() while another thread executes one of - /// the dequeue member functions will result in undefined - /// behavior. - -protected: - typedef std::multimap<Clock, Notification::Ptr> NfQueue; - Notification::Ptr dequeueOne(NfQueue::iterator& it); - bool wait(Clock::ClockDiff interval); - -private: - NfQueue _nfQueue; - Event _nfAvailable; - mutable FastMutex _mutex; -}; - - -} // namespace Poco - - -#endif // Foundation_TimedNotificationQueue_INCLUDED +// +// TimedNotificationQueue.h +// +// Library: Foundation +// Package: Notifications +// Module: TimedNotificationQueue +// +// Definition of the TimedNotificationQueue class. +// +// Copyright (c) 2009, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef Foundation_TimedNotificationQueue_INCLUDED +#define Foundation_TimedNotificationQueue_INCLUDED + + +#include "Poco/Foundation.h" +#include "Poco/Notification.h" +#include "Poco/Mutex.h" +#include "Poco/Event.h" +#include "Poco/Timestamp.h" +#include "Poco/Clock.h" +#include <map> + + +namespace Poco { + + +class Foundation_API TimedNotificationQueue + /// A TimedNotificationQueue object provides a way to implement timed, asynchronous + /// notifications. This is especially useful for sending notifications + /// from one thread to another, for example from a background thread to + /// the main (user interface) thread. + /// + /// The TimedNotificationQueue is quite similar to the NotificationQueue class. + /// The only difference to NotificationQueue is that each Notification is tagged + /// with a Timestamp. When inserting a Notification into the queue, the + /// Notification is inserted according to the given Timestamp, with + /// lower Timestamp values being inserted before higher ones. + /// + /// Notifications are dequeued in order of their timestamps. + /// + /// TimedNotificationQueue has some restrictions regarding multithreaded use. + /// While multiple threads may enqueue notifications, only one thread at a + /// time may dequeue notifications from the queue. + /// + /// If two threads try to dequeue a notification simultaneously, the results + /// are undefined. +{ +public: + TimedNotificationQueue(); + /// Creates the TimedNotificationQueue. + + ~TimedNotificationQueue(); + /// Destroys the TimedNotificationQueue. + + void enqueueNotification(Notification::Ptr pNotification, Timestamp timestamp); + /// Enqueues the given notification by adding it to + /// the queue according to the given timestamp. + /// Lower timestamp values are inserted before higher ones. + /// The queue takes ownership of the notification, thus + /// a call like + /// notificationQueue.enqueueNotification(new MyNotification, someTime); + /// does not result in a memory leak. + /// + /// The Timestamp is converted to an equivalent Clock value. + + void enqueueNotification(Notification::Ptr pNotification, Clock clock); + /// Enqueues the given notification by adding it to + /// the queue according to the given clock value. + /// Lower clock values are inserted before higher ones. + /// The queue takes ownership of the notification, thus + /// a call like + /// notificationQueue.enqueueNotification(new MyNotification, someTime); + /// does not result in a memory leak. + + Notification* dequeueNotification(); + /// Dequeues the next pending notification with a timestamp + /// less than or equal to the current time. + /// Returns 0 (null) if no notification is available. + /// The caller gains ownership of the notification and + /// is expected to release it when done with it. + /// + /// It is highly recommended that the result is immediately + /// assigned to a Notification::Ptr, to avoid potential + /// memory management issues. + + Notification* waitDequeueNotification(); + /// Dequeues the next pending notification. + /// If no notification is available, waits for a notification + /// to be enqueued. + /// The caller gains ownership of the notification and + /// is expected to release it when done with it. + /// + /// It is highly recommended that the result is immediately + /// assigned to a Notification::Ptr, to avoid potential + /// memory management issues. + + Notification* waitDequeueNotification(long milliseconds); + /// Dequeues the next pending notification. + /// If no notification is available, waits for a notification + /// to be enqueued up to the specified time. + /// Returns 0 (null) if no notification is available. + /// The caller gains ownership of the notification and + /// is expected to release it when done with it. + /// + /// It is highly recommended that the result is immediately + /// assigned to a Notification::Ptr, to avoid potential + /// memory management issues. + + bool empty() const; + /// Returns true iff the queue is empty. + + int size() const; + /// Returns the number of notifications in the queue. + + void clear(); + /// Removes all notifications from the queue. + /// + /// Calling clear() while another thread executes one of + /// the dequeue member functions will result in undefined + /// behavior. + +protected: + typedef std::multimap<Clock, Notification::Ptr> NfQueue; + Notification::Ptr dequeueOne(NfQueue::iterator& it); + bool wait(Clock::ClockDiff interval); + +private: + NfQueue _nfQueue; + Event _nfAvailable; + mutable FastMutex _mutex; +}; + + +} // namespace Poco + + +#endif // Foundation_TimedNotificationQueue_INCLUDED |