athoslive Postado Agosto 2, 2012 Denunciar Share Postado Agosto 2, 2012 Eu gostaria que alguém me informasse como criar um programa com multitarefa,onde por exemplo,eu pudesse fazer 2 whiles acontecerem ao mesmo tempo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Durub Postado Agosto 3, 2012 Denunciar Share Postado Agosto 3, 2012 Tem que usar threads.Deve ter muita informação na internet sobre, só dar uma buscada por "threads"!Abraços! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 athoslive Postado Agosto 4, 2012 Autor Denunciar Share Postado Agosto 4, 2012 Ainda não achei um bom tutorial,se você souber de algum,poste aqui por favor. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 rickayron Postado Agosto 5, 2012 Denunciar Share Postado Agosto 5, 2012 Ainda não achei um bom tutorial,se você souber de algum,poste aqui por favor.PROCURE EM INGLES POIS A MAIORIA DOS BONS TUTORIAIS DESSA LINGUAGEM É EM INGLES.ATÉ MAI.Shttp://www.cpdee.ufmg.br/~seixas/PaginaATR...TheadsinC++.PDFhttp://samuca.wordpress.com/2009/02/17/thr...em-cc-no-linux/ Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 athoslive Postado Agosto 6, 2012 Autor Denunciar Share Postado Agosto 6, 2012 Eu uso BorlandC - Windows e não gostei muito destes tutoriais,eu preciso de um que explique de uma forma bem simplificada. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Agosto 6, 2012 Denunciar Share Postado Agosto 6, 2012 O problema de ser simplificado é que o uso de threads não é algo assim tão trivial...Você também pode criar um outro processo usando o fork() e comunicar entre os processos por um pipe, por exemplo.Execute esse teste (em Linux):#include <stdio.h> #include <unistd.h> int main(void) { if(fork()) { printf("Eu sou o pai!\n"); } else { printf("Eu sou o filho!\n"); } return 0; }Nesse exemplo, um novo processo é criado a partir da "cópia" do processo atual, duplicando-o.A função fork() cria um novo processo. A partir de então o código será executado pelos dois processos em paralelo.A função retorna 0 se estiver executando o processo filho e o ID do processo criado se executando no processo pai.Pode parecer um pouco confuso no começo mas depois você acostuma! :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 athoslive Postado Agosto 6, 2012 Autor Denunciar Share Postado Agosto 6, 2012 Então por exemplo,num jogo,eu poderia mover 2 "naves" ao mesmo tempo? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Agosto 7, 2012 Denunciar Share Postado Agosto 7, 2012 Threads são criadas para dividir tarefas maiores. Por exemplo: se no jogo existirem 100 naves, você não vai ter 100 threads...Imagine um algoritmo que execute uma lógica demorada. Nesse caso vale a pena ter threads pois assim você distribui o algoritmo para rodar em vários processadores, executando a ação mais rapidamente. Mesmo em um processador multi-core, se seu programa exigir 100% de carga de cpu, apenas 1 dos processadores ficará em 100% e os outros ociosos se você não usar threads.Outro exemplo: um programa que comunica em rede, serial, etc... Ele depende de resposta de computadores remotos para continuar e, durante esse período, seu programa deixaria de responder. Assim cria-se uma thread que é a responsável pela comunicação. Ela é quem vai ficar travada esperando a resposta enquanto seu programa pode continuar funcionando.O que exatamente você pretende fazer? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 athoslive Postado Agosto 7, 2012 Autor Denunciar Share Postado Agosto 7, 2012 Olhe este código:http://scriptbrasil.com.br/forum/index.php?showtopic=170529Quando eu "atiro",ele trava tudo esperando o "for" finalizar,ou seja,nenhuma "nave" se move enquanto o tiro anda.Eu queria fazer duas ações funcionarem ao mesmo tempo,2 ou mais "for" ou "while",porque ai não teria que esperar cada ação ocorrer.Um dos problemas é que se você aperta muito rápido alguma seta,o programa "buga" e a nave anda sozinha por um tempo. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Marcelo Utikawa da Fonseca Postado Agosto 11, 2012 Denunciar Share Postado Agosto 11, 2012 O problema é a forma que está implementada a função. Mesmo que houvesse uma thread, o loop principal não teria resposta da thread enquanto o tiro não terminasse.O ideal nesse caso é fazer um código que não bloqueie. Por exemplo, para a função tiro, uma solução seria alterar a função de:void tiro(int p,int y) { for(y=24;y>=1;y --) { gotoxy(p,y); printf("|"); delay(10); gotoxy(p,y); printf(" "); nave(p_r,p_m,p_n); inimigo(p_i,p_v,p_b); if(p_r==p_i || p_r==p_v || p_r==p_b) { if(y==1) vi=vi-10; } } gotoxy(p,y); printf(" "); } para: int tiro(int p) { static int y = 0; if(!y) y = 24; gotoxy(p,y); printf("|"); delay(10); gotoxy(p,y); printf(" "); nave(p_r,p_m,p_n); inimigo(p_i,p_v,p_b); if(p_r==p_i || p_r==p_v || p_r==p_b) { if(y==1) vi=vi-10; } if(!--y) gotoxy(p,y); printf(" "); return y; }Nesse código não existe o for. Você terá que chamar a função tiro do seu loop. Ela retorna o valor atual de y para você saber se já terminou ou não e assim parar de chamar a função de tiro. E não fica travado na função.Esse é apenas um exemplo de alterção de lógica para não travar. Tem muitas outras coisas que podiam ser feitas e alguns problemas a resolver como o caso de haver mais de um tiro, por exemplo.Mas te dá uma idéia de por onde comçear! :) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
athoslive
Eu gostaria que alguém me informasse como criar um programa com multitarefa,onde por exemplo,eu pudesse fazer 2 whiles acontecerem ao mesmo tempo.
Link para o comentário
Compartilhar em outros sites
9 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.