Я пишу класс, который должен выполнять различные трудоемкие операции в фоновом режиме. Сначала он получает какие-то данные с удаленного хоста и должен предоставить их обратно пользователю, завернутому в какой-то контейнер-вектор. Затем он должен периодически отправлять уведомления на удаленный хост. Результат отправки уведомлений не нужен. Также возможно, что классу будет предложено несколько раз получить данные с удаленного хоста, но отправка уведомлений в этот момент запрещена. Поэтому я сомневаюсь, какой подход выбрать.
Для периодической отправки уведомлений самое очевидное, что приходит на ум, - это периодически создавать темы и публиковать задания. Для извлечения асинхронных данных кажется, что std :: future был бы более разумным подходом, но потом я беспокоюсь, что мой класс выглядел бы страшно, если бы все эти разные вещи одновременно, а не придерживался одного из них.
class ThreadAndFutureClient
{
public:
std::future<std::vector<Entry>> get_entries();
// post to thread
void send_notification();
// ok, we may assume this is hidden in pimpl, so not visible to the user,
// but still the presence of two buggs me a little
private:
std::thread thread_;
}
или
class TheAllThreadClient
{
public:
// post to thread
void fetch_entries();
// post to thread
void send_notification();
// return false if fetch entries is running in a thread currently,
// return true if fetch entries is not running and fill in vector with fetched data
bool get_entries(std::vector<Entry>& vector);
private:
std::thread thread_;
}