Threads

1. Threads

mekson
meksonjr

(usa Outra)

Enviado em 14/09/2016 - 11:46h

Bom dia pessoal estou fazendo FILA em c++ usando o code blocks e me deparei com um problema, eu coloquei uma "musica" para rodar em paralelo na mesma função segue abaixo o codigo, o problema é q assim q ele termina de fazer o for, ele vai executar o switchCase mas a "musica" não para ela continua, teria como eu para ela encerar assim q terminar de carregar o for? desde ja obrigado

void geraPedidos()
{
    system("color 40");
        thread m (musica);
    cout << "Aguarde carregar a fila... " << endl;
    for (int i=0; i<10; i++)
    {
        Ingresso ing;
        ing.geraIngresso();
        f.enqueue(ing);
        cout << i+1 << " ";
        Sleep(rand()%2000);
        //Beep(700,500);
    }
        m.join();
    cout<< endl;
    cout << "Fila carregada... " <<endl;
    system("pause");
    system("cls");
    switchCase();
}

void verFila()
{
    system("color 70");
    system("cls");
    f.exibir();

    system("PAUSE");
    system ("cls");
}

void atenderFila()
{
    system("color 70");
    system ("cls");
    Ingresso ing = f.dequeue();

    cout << "ATENDENDO: " <<endl;
    cout << ing.descricao <<endl;
    system("PAUSE");
    system("cls");
}
void switchCase ()
{   system("color 71");
    int opcao;

    do
    {
        cout << "1. VER FILA DE INGRESSOS " <<endl;
        cout << "2. ATENDER PEDIDO " <<endl;
        cout << "3. Gerar mais Pedidos " << endl;
        cout << "0. SAIR" <<endl;
        cin >> opcao;
        switch (opcao)
        {
            case 1: verFila();
                break;
            case 2: atenderFila();
                break;
            case 3: geraPedidos();
            break;
          ;

        }
               
                system("cls");
    }while (opcao!=0);
}
int main()
{   bemVindo();
    f.inicializar();
    //system("color 70");
    srand(time(0));
    thread t(geraPedidos);

    //switchCase();
    t.join(); //aguarda geraPedidos acabar sua execu&#1095;&#1091;o

    return 0; 



  


2. Re: Threads

Paulo
paulo1205

(usa Ubuntu)

Enviado em 14/09/2016 - 15:46h

Após criar a thread, chame m.detach(). Qunado m sair de escopo, a thread deve ser cancelada.


3. Re: Threads

mekson
meksonjr

(usa Outra)

Enviado em 14/09/2016 - 15:59h

paulo1205 escreveu:

Após criar a thread, chame m.detach(). Qunado m sair de escopo, a thread deve ser cancelada.


Vc pode me mostrar como, eu tentei chamar m.detach() mas ela não esta encerando a "musica".

obrigado desde ja


4. Re: Threads

Paulo
paulo1205

(usa Ubuntu)

Enviado em 15/09/2016 - 01:34h

Peço as mais sinceras desculpas, pois dei uma informação errônea, devido a entendimento também errôneo.

Na verdade, chamar detach() sobre uma thread apenas permite destruir o objeto que a representa, mas isso não significa que a thread em si vá deixar de existir quando ele for destruído.

Cancelar uma thread a qualquer momento não é uma operação prevista para a classe std::thread. Se você precisar disso, terá ou de apelar para recursos internos do seu sistema operacional, ou terá de reprojetar o programa, introduzido algum mecanismo de sincronia ou comunicação entre as threads, a fim de que uma delas termine e seja join()ed por outra.


5. Re: Threads

mekson
meksonjr

(usa Outra)

Enviado em 15/09/2016 - 07:51h

paulo1205 escreveu:

Peço as mais sinceras desculpas, pois dei uma informação errônea, devido a entendimento também errôneo.

Na verdade, chamar detach() sobre uma thread apenas permite destruir o objeto que a representa, mas isso não significa que a thread em si vá deixar de existir quando ele for destruído.

Cancelar uma thread a qualquer momento não é uma operação prevista para a classe std::thread. Se você precisar disso, terá ou de apelar para recursos internos do seu sistema operacional, ou terá de reprojetar o programa, introduzido algum mecanismo de sincronia ou comunicação entre as threads, a fim de que uma delas termine e seja join()ed por outra.


Ah assim entendi, será que teria algum outro jeito de executar essas "musicas" em paralelo com o for o sem o auxilio da thread?

desde ja muito obrigado


6. Re: Threads

mekson
meksonjr

(usa Outra)

Enviado em 15/09/2016 - 08:12h

Peço as mais sinceras desculpas, pois dei uma informação errônea, devido a entendimento também errôneo.

Na verdade, chamar detach() sobre uma thread apenas permite destruir o objeto que a representa, mas isso não significa que a thread em si vá deixar de existir quando ele for destruído.

Cancelar uma thread a qualquer momento não é uma operação prevista para a classe std::thread. Se você precisar disso, terá ou de apelar para recursos internos do seu sistema operacional, ou terá de reprojetar o programa, introduzido algum mecanismo de sincronia ou comunicação entre as threads, a fim de que uma delas termine e seja join()ed por outra.



A assim entendi, será que teria algum outro jeito de executar essas "musicas" em paralelo com o for o sem o auxilio da thread?

desde ja muito obrigado






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts