启动一个守护程序线程,它是该类的私有方法?

时间:2016-05-21 03:34:21

标签: c++ multithreading c++11

我是C ++ 11线程的新手,我正在尝试做以下事情:

NULL

然而,线程一直被阻止。在Error:(47, 35) No resource found that matches the given name (at 'resource' with value '@xml/searchable'). Error:(81, 35) No resource found that matches the given name (at 'resource' with value '@xml/syncadapter'). Error:(90, 35) No resource found that matches the given name (at 'resource' with value '@xml/authenticator'). 执行之后没有任何内容。它只是在循环运行时挂起。

2 个答案:

答案 0 :(得分:6)

通常的模式是

fork()

分离print [sum(A[:i]) for i in range(1,len(A)+1)] 通常不是一个好主意,除非有某种同步设置,允许等待线程执行在整个过程结束之前结束。

Demonizing一个进程通常使用numpy.cumsum(A) 来实现创建后台子进程,并让父进程将控制权返回给调用者。

答案 1 :(得分:1)

我最近写了一个只做这个的通用类

#include<functional>
#include<thread>

//do action asynchronously until condition is false
class do_async_until{
public:
    do_async_until(std::function<void(void)> action,
                   std::function<bool(void)> condition);
    ~do_async_until();
    void start();
    void stop();
private:
    void _do();
    std::thread _worker;
    std::function<void(void)> _action;
    std::function<bool(void)> _condition;
};
//implementation
do_async_until::do_async_until(std::function<void(void)> action,
               std::function<bool(void)> condition):_action(action),
                                     _condition(condition){
}
do_async_until::~do_async_until(){
    stop();
}
void do_async_until::start(){
    _worker = std::thread(std::bind(&do_async_until::_do,this));
}
void do_async_until::stop(){
    if(_worker.joinable()){
        _worker.join();
    }
}
void do_async_until::_do(){
    while (_condition())
    {
        _action();
    }
}

这将运行带有signiture void(void)的任何函数,直到条件函数bool(void)返回true

示例用法:

int main(int agrc,char** argv){
    bool running = true;
    auto do_this = [](){
        std::cout<<"hello world"<<std::endl;
    };
    auto condition = [&](){
        return running;
    };
    do_async_until async(do_this,condition);
    async.start();
    std::this_thread::sleep_for(std::chrono::seconds(1));
    running=false;

    return 0;
}

示例应该打印&#34; hello world&#34;一两次然后退出。

编辑:要使用成员函数进行此操作,您只需要在类中包含do_async_until实例,并使用std::bind(&foo::func,this)将成员函数传递给do_async_until的构造函数