Ir para conteúdo
Fórum Script Brasil
  • 0

MULTITAREFAS - DUVIDAS


athoslive

Pergunta

9 respostass a esta questão

Posts Recomendados

  • 0

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! :)

Link para o comentário
Compartilhar em outros sites

  • 0

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?

Link para o comentário
Compartilhar em outros sites

  • 0

Olhe este código:http://scriptbrasil.com.br/forum/index.php?showtopic=170529

Quando 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.

Link para o comentário
Compartilhar em outros sites

  • 0

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! :)

Link para o comentário
Compartilhar em outros sites

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...