Jump to content
Fórum Script Brasil
  • 0

MULTITAREFAS - DUVIDAS


athoslive
 Share

Question

9 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      150.2k
    • Total Posts
      647.4k
×
×
  • Create New...