我是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').
执行之后没有任何内容。它只是在循环运行时挂起。
答案 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的构造函数