小编enk*_*wor的帖子

返回活动对象的值

早在2010年,Herb Sutter 就在Dobb博士的一篇文章中提倡使用活性物体而不是裸线.

这是一个C++ 11版本:

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

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

    Active() : done(false) {
        thd = std::unique_ptr<std::thread>(new std::thread( [=]{ this->run(); } ) );
    }

    ~Active() {
        send( [&]{ done = true; } );
        thd->join();
    }

    void send(Message m) { mq.push_back(m); }

private:
    bool done;
    message_queue<Message> mq; // a thread-safe concurrent queue
    std::unique_ptr<std::thread> thd;

    void run() {
        while (!done) {
            Message msg = mq.pop_front();
            msg(); // execute message …
Run Code Online (Sandbox Code Playgroud)

c++ active-objects move-semantics c++11

8
推荐指数
1
解决办法
1112
查看次数

标签 统计

active-objects ×1

c++ ×1

c++11 ×1

move-semantics ×1