You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

60 lines
1.4 KiB

#pragma once
/**
* @file IAsyncContext.h
* @brief Async context interface
* @copyright VisionLabs LLC
* @date 30.05.2014
* */
#include <cstdint>
#include "Def.h"
#include "IRefCounted.h"
#include "Types.h"
namespace fsdk {
#ifndef DOXYGEN_SHOULD_SKIP_THIS
DECLARE_SMARTPTR(IAsyncContext);
#endif
/**
* @brief Interface for running tasks asynchronously.
* @details Contains thread pool under hood.
* */
struct IAsyncContext
: IRefCounted {
/**
* @brief Returns size of underlying thread pool.
* @return Count of threads.
* */
virtual int8_t threads() const noexcept = 0;
/**
* @brief Tells validness of internal state
* @return True if valid, false otherwise.
* */
virtual bool valid() const noexcept = 0;
/**
* @brief Clears tasks not yet taken by any thread.
* @return True on success, false otherwise.
* */
virtual bool clearTaskQueue() noexcept = 0;
/**
* @brief Resizes internal thread pool to some new size
* param newThreadCount New size of thread pool. Should not be less than 1
* @return True on success, false otherwise.
* */
virtual bool resize(const int8_t newThreadCount) noexcept = 0;
/**
* @brief Waits for all already running tasks to complete, then stops
* every thread. Do not use threadpool afterwards. Is called on destruction.
* @return True on success, false otherwise.
* */
virtual bool stop() noexcept = 0;
};
}