Support async::executor::clear()

This commit is contained in:
Nikita Lisitsa 2025-10-18 17:31:34 +03:00
parent 78e9731d8d
commit 615ee51229
7 changed files with 22 additions and 4 deletions

View file

@ -17,6 +17,8 @@ namespace psemek::async
void stop() override; void stop() override;
void clear() override;
void wait() override; void wait() override;
void wait_for(clock::duration period) override; void wait_for(clock::duration period) override;

View file

@ -29,6 +29,9 @@ namespace psemek::async
// NB: the executor must call stop() from destructor. // NB: the executor must call stop() from destructor.
virtual void stop() = 0; virtual void stop() = 0;
// Clear the pending tasks queue.
virtual void clear() = 0;
// Wait for all the tasks to be executed. // Wait for all the tasks to be executed.
// May take forever. // May take forever.
virtual void wait() = 0; virtual void wait() = 0;

View file

@ -14,6 +14,8 @@ namespace psemek::async
void stop() override; void stop() override;
void clear() override;
void wait() override; void wait() override;
void wait_for(clock::duration period) override; void wait_for(clock::duration period) override;

View file

@ -31,6 +31,8 @@ namespace psemek::async
void stop() override; void stop() override;
void clear() override;
void wait() override; void wait() override;
void wait_for(clock::duration period) override; void wait_for(clock::duration period) override;

View file

@ -1,7 +1,5 @@
#include <psemek/async/event_loop.hpp> #include <psemek/async/event_loop.hpp>
#include <algorithm>
namespace psemek::async namespace psemek::async
{ {
@ -20,6 +18,11 @@ namespace psemek::async
queue_.clear(); queue_.clear();
} }
void event_loop::clear()
{
queue_.clear();
}
void event_loop::wait() void event_loop::wait()
{ {
while (!queue_.empty()) while (!queue_.empty())

View file

@ -1,8 +1,6 @@
#include <psemek/async/synchronous_executor.hpp> #include <psemek/async/synchronous_executor.hpp>
#include <psemek/util/exception.hpp> #include <psemek/util/exception.hpp>
#include <stdexcept>
namespace psemek::async namespace psemek::async
{ {
@ -19,6 +17,9 @@ namespace psemek::async
void synchronous_executor::stop() void synchronous_executor::stop()
{} {}
void synchronous_executor::clear()
{}
void synchronous_executor::wait() void synchronous_executor::wait()
{} {}

View file

@ -85,6 +85,11 @@ namespace psemek::async
threads_.clear(); threads_.clear();
} }
void threadpool::clear()
{
task_queue_.clear();
}
void threadpool::wait() void threadpool::wait()
{ {
std::unique_lock lock{working_count_mutex_}; std::unique_lock lock{working_count_mutex_};