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

Mais De Uma Função Rodando Ao Mesmo Tempo


Lucas NN

Pergunta

Olá,

Até onde vai meu conhecimento eu só consigo fazer rodar uma função de cada vez em C/C++, agora eu queria saber como rodar mais funções ao mesmo tempo, uma independente da outra.

E como se faz o cursor rotativo nesse estilo _ -> \ -> | -> / -> _ (as setas só mostram a mudança de estado por segundo do cursor)

Obrigado.

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Para ter mais de uma função rodando "ao mesmo tempo" você deve fazer uso de uma técnica chamada multithreading, onde o programa teria várias threads, ou linhas de execução, rodando "simultaneamente". As aspas nas expressões que exprimem simultaneidade se devem ao fato de que o que ocorre realmente é que o processador concede um intervalo de tempo para uma thread fazer uma parte do seu trabalho, depois pausa essa e concede um intervalo para outra, e assim sucessivamente. Isso é o que se chama de chaveamento de contexto, a base de funcionamento da programação concorrente.

Uma das funções que permitem a criação de threads em C é a _beginthreadex, da biblioteca "process.h". O protótipo dela é o seguinte:

unsigned long _beginthreadex (
    void *,        // Atributos de segurança. Para
                   // aplicações simples pode ser NULL.

    unsigned,      // Tamanho da pilha (stack) da
                   // thread. Pode ser 0, o que significa
                   // que a pilha terá o mesmo tamanho
                   // que a pilha da thread principal.

    unsigned ( _stdcall * )( void * ),  // Ponteiro para a
                                        // função a ser
                                        // executada
                                        // (observe o
                                        // protótipo).

    void *,    // Argumento para a função passada
               // acima.

    unsigned,      // Estado inicial da thread. Pode ser
                   // 0 para iniciar a execução logo quando
                   // criada ou CREATE_SUSPEND para ser
                   // criada pausada.

    unsigned *    // ID da thread. Observe que é um
                  // ponteiro.
);

Se você tiver duas funções (com os protótipos equivalentes ao terceiro argumento da função acima, poderá executá-las concorrentemente chamando a função _beginthreadex para essas funções.

Mas não é só isso, há outras (muitas outras) especificações quanto ao uso de threads. Creio que buscando no Google muitas informações preciosas poderão ser encontradas.

Link para o comentário
Compartilhar em outros sites

  • 0

Lembrando que a API do Windows (biblioteca 'Windows.h') 'CreateThread' também serveria (têm seis parâmetros e assinatura igual a dessa função. Alias, essa função que se baseia na API 'CreateThread').

Falows!

Link para o comentário
Compartilhar em outros sites

  • 0

Sim, Dennis. Mas o problema em usar CreateThread está no fato de que algumas funções e variáveis da STCRTL (Single-Threaded C Runtime Library) não funcionarem corretamente em um programa multi-threaded (ou multi-tarefa). A função _beginthreadex faz sim uma chamada a CreateThread para criar a thread, mas antes ela associa uma estrutura de dados a cada uma das threads criadas, eliminando essas incompatibilidades entre versões da CRTL (C Runtime Library).

Link para o comentário
Compartilhar em outros sites

  • 0

Ainda não entendi direito como usar a função "_beginthreadex" então seria esclarecedor se alguém pudesse passar um exemplo...

Supondo que eu tenha duas funções:

void insere(no **inicio, int n);

void remove(no **inicio);

Onde *inicio é uma variável da estrutura:

typedef struct no{

int chave;

struct no *prox;

};

no *inicio;

Agora eu gostaria de saber como fazer para inserir elementos nessa estrutura (que no caso é uma FILA) e remover ao mesmo tempo.

Obs.: cada função tem uma função Sleep que ajusta tempos diferentes para a inserção e remoção, desse modo a função remove só começa a remover quanto já houverem elementos na fila.

Obrigado. B)

Berne[RM]

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Woody.... não logado

Aí,

O que você precisa não é só de multithread, precisa também de message queue e um shared memory...

Bom, eu recomendo um bom livro de Linguagem C (ou alguém que se habilite a te ajudar aqui no fórum)...

Até +

B)

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
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...