我遇到线程处理问题。
我希望这两个主题在后台运行:
if(jobdone==true){
jobdone=false;
c=' ';
can1=qu.at(0);
qu.erase(qu.begin());
cout<<"ID: "<<can1.id<<endl;
cout<<"Time: "<<can1.tiempo<<endl;
cout<<"Type "<<can1.type[can1.id_type]<<endl;
Hilo h(&can1);
thread x(h);
x.detach();
}
if(jobdone2==true){
jobdone2=false;
c=' ';
can2=qu.at(0);
qu.erase(qu.begin());
cout<<"ID: "<<can2.id<<endl;
cout<<"Time: "<<can2.tiempo<<endl;
cout<<"Type "<<can2.type[can1.id_type]<<endl;
Hilo2 h2(&can2);
thread y(h2);
y.detach();
}
每当它们完成时,它们各自的标志“jobdone”就会被激活,所以我可以从一个新的线程开始,用几句话说,我想用两个线程运行一个队列的每个进程。
每个线程运行一个“等待”函数,使其保持运行,直到每个对象的时间,完成,然后激活标志;
一切都可以顺利运行,但是当我使用两个线程时,它会在等待函数中循环。
这是等待功能:
char wait(Canica &can)
{
char c;
cout<<endl;
clock_t endwait;
endwait= clock() + (can.tiempo+4) *CLOCKS_PER_SEC;
while(clock()<endwait && c!='s' && c!='e' && c!='b'){
c=' ';
can.elapsed_time=int((endwait-clock())/1000000);
if(kbhit())c=getchar();
}
if(c=='b'|| c=='e')
can.res_time=int((endwait-clock())/1000000);
cout<<"FINISH"<<endl;
return c;
}
我已经尝试过两个独立的“等待”函数,每个线程一个,但它不起作用。
这是线程的代码,两者都是相同的,只是名称更改。
class Hilo{
public:
void print();
char c;
Canica *can;
Hilo(Canica *c) { can=c; }
void operator()()
{
c=waitH1(*can);
cout<<endl;
if(c=='e'){
cout<<"Error de canica"<<endl;
can->error=true;
}
if(c=='s')
{
can->exit_flag=1;
{
jobdone = true;
}
}else{
if(c=='b')
{
can->blocked_flag=1;
can->pushBlocked(*can);
}
else{
{
jobdone = true;
}
can->ejecutado=true;
}
}
}
};