Ir ao conteúdo
  • Cadastre-se

Como parar de executar um thread em c?


Posts recomendados

Estou tentando desenvolver um programa de vendas. Cada venda gerada será salva em um .txt. O objetivo era ler esses .txt de outro programa. A primeira parte da criação da venda já está praticamente toda pronta e abaixo segue o código do programa que vai ler os arquivos:

 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>
#include <pthread.h>


void *cronometro(void *dados)
{
   	int seg, min = 0;
	char info [50], ped, nome_arquivo[20];
	int contador=1, fim, errno;
	FILE *arq;		
   	
    system("color 20");
    
		 for(min=00; min<=60; min++)
		 {	
  			for(seg=00; seg<=60; seg++)
  			{
    			sleep(1);
    			system("cls");
		
						     sprintf(nome_arquivo, "pedido%d.txt", contador); //SPRINTf é utilizado para usar a variável na busca do arquivo. Printa o nome do arquivo no vetor "NOME_ARQUIVO".
					       	arq = fopen(nome_arquivo, "r");
	
							if(arq == NULL)
							printf("\nNenhum novo pedido na fila");
				
	
						while((fgets(info, sizeof(info), arq)) !=NULL)
						printf(" %s", info);
		
					    fclose(arq);
    		
    		         	printf("\n TEMPO DE ESPERA DO CLIENTE: %dm%ds \n\n Tecle <ENTER> para finalizar o prepapro. ", min, seg);
    		        	fflush(stdout);			
	       }
	        	
     		if (min==1)
     			system("color 60");
     			  	
     		else if(min==2)
     			system("color 47");
	     }
 			    
  return NULL;
}


int main() {
setlocale(LC_ALL, "portuguese");
int volta;

do{
	pthread_t thr_id;
	
	   	if((errno=pthread_create(&thr_id, NULL, cronometro, NULL))!=0)
    	{
         fprintf(stderr, "\nErro %d na criacao da thread.  Abortando.\n", errno);
         return 1;
        }
        
	    scanf("*[^\n]%*1[\n]");
        pthread_cancel(thr_id);
        
        printf("\n PEDIDO FINALIZADO COM SUCESSO!\n");
        printf("\n Digite 1 para atualizar a lista de pedidos: ");
 	    scanf("%d", &volta);
 	    
 	    }while(volta==1);
			
	return 0;
}

Os arquivos serão salvos com o nome de "pedido%d.txt" e ali virá uma variável de forma que a cada nova venda, um novo arquivo seja criado. Dessa forma eu posso pegar depois os arquivos independentes, como descrito no código. O que queria fazer agora era um marcador de tempo que mudasse a cor do console dependendo da demora no preparo do produto, contudo, preciso também usar um scanf ou algo do tipo pra que o usuário informe que o produto está terminado e um novo arquivo apareça na tela.

 

Pesquisando, achei esse link:

https://www.vivaolinux.com.br/topico/C-C++/Cronometro

 

Fiz algumas adaptações e meio que funcionou, mas agora o thread não para de executar para que o usuário informe que o produto está pronto. Alguém tem alguma ideia de como resolver o problema?

 

 

Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...
Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...