使用两个线程C ++等待函数运行两个进程

时间:2015-11-02 01:59:51

标签: c++ multithreading wait

我遇到线程处理问题。

我希望这两个主题在后台运行:

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;
        }

    }



}

};

0 个答案:

没有答案