work_queue.h
1/*
2** ClanLib SDK
3** Copyright (c) 1997-2020 The ClanLib Team
4**
5** This software is provided 'as-is', without any express or implied
6** warranty. In no event will the authors be held liable for any damages
7** arising from the use of this software.
8**
9** Permission is granted to anyone to use this software for any purpose,
10** including commercial applications, and to alter it and redistribute it
11** freely, subject to the following restrictions:
12**
13** 1. The origin of this software must not be misrepresented; you must not
14** claim that you wrote the original software. If you use this software
15** in a product, an acknowledgment in the product documentation would be
16** appreciated but is not required.
17** 2. Altered source versions must be plainly marked as such, and must not be
18** misrepresented as being the original software.
19** 3. This notice may not be removed or altered from any source distribution.
20**
21** Note: Some of the libraries ClanLib may link to may have additional
22** requirements or restrictions.
23**
24** File Author(s):
25**
26** Magnus Norddahl
27*/
28
29#pragma once
30
31#include <memory>
32#include <functional>
33
34namespace clan
35{
38
41 {
42 public:
43 virtual ~WorkItem() { }
44
46 virtual void process_work() = 0;
47
49 virtual void work_completed() { }
50 };
51
52 class WorkQueue_Impl;
53
56 {
57 public:
60 WorkQueue(bool serial_queue = false);
62
66 void queue(WorkItem *item);
67
69 void queue(const std::function<void()> &func);
70
72 void work_completed(const std::function<void()> &func);
73
75 int get_items_queued() const;
76
81
82 private:
83 std::shared_ptr<WorkQueue_Impl> impl;
84 };
85
87}
Interface for executing work on a worker thread.
Definition work_queue.h:41
virtual void work_completed()
Called by the WorkQueue thread to complete the work.
Definition work_queue.h:49
virtual ~WorkItem()
Definition work_queue.h:43
virtual void process_work()=0
Called by a worker thread to process work.
Thread pool for worker threads.
Definition work_queue.h:56
void queue(WorkItem *item)
Queue some work to be executed on a worker thread.
void process_work_completed()
Process work completed queue.
WorkQueue(bool serial_queue=false)
Constructs a work queue.
void queue(const std::function< void()> &func)
Queue some work to be executed on a worker thread.
int get_items_queued() const
Returns the number of items currently queued.
void work_completed(const std::function< void()> &func)
Queue some work to be executed on the main WorkQueue thread.
Definition clanapp.h:36