Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
João Victor Simonassi Farias

Como parar de executar um thread em c?

Recommended Posts

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?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×