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