aboutsummaryrefslogtreecommitdiffstats
path: root/yage/util/active.h
blob: 9b5cb4dde4959fa0b3592ee358d4d8cb09fea23e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/** ---------------------------------------------------------------------------
 * @file: active.h
 *
 * Copyright (c) 2017 Yann Herklotz Grave <ymherklotz@gmail.com>
 * MIT License, see LICENSE file for more details.
 * ----------------------------------------------------------------------------
 */

#pragma once

#include "syncqueue.h"

#include <functional>
#include <memory>
#include <thread>

namespace yage
{

class Active
{
public:
    typedef std::function<void()> Callback;

    Active(const Active &) = delete;
    Active &operator=(const Active &) = delete;

    ~Active();

    static std::unique_ptr<Active> create();

    void send(Callback message);

private:
    Active();
    void run();

    bool running_;
    SyncQueue<Callback> queue_;
    std::thread thread_;
};

} // namespace yage