seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^

Participe do fórum, é rápido e fácil

seja bem vindo ao forum eof, caso nao seja cadastrado se cadastre para poder visualizar todo o conteudo ^^
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Você não está conectado. Conecte-se ou registre-se

[tutorial] multi-thread em c

Ir para baixo  Mensagem [Página 1 de 1]

1[tutorial] multi-thread em c Empty [tutorial] multi-thread em c Seg Out 15, 2012 1:05 am

Kodo no Kami

Kodo no Kami
master
master

bom galera muitas vezes agente cria um programa usando um unico processo e isso pode deixar o programa preso em um loop ou so vai executar a outra parte do codigo quando terminar a atual, para evitar isso agente pode usar multi-thread q seria um sub-processo para o mesmo, veja a source abaixo ela fica presa no primeiro loop e nao executa o segundo loop

Código:
#include <stdio.h>

int main(void)
{
  while(1)
  {
      printf("hacker\n");
  }

  while(1)
  {
      printf("fts315\n");
  }
}

se agente executar a source acima ela vai exibir apenas "hacker" e nao o "fts315" se agente tiver usando multi-thread ele vai exibir ambos isso pq elas vao esta usando processo diferente, para usar multi-thread em linux podemos usar a funçao fork e atribuir ela a uma variavel e depois colocar uma codiçao logo em seguida

Código:
#include <stdio.h>

int main(void)
{
  int fts = fork();
  if(fts == 0)
  {
      while(1)
     {
       printf("hacker\n");
     }
     exit(0);
  }

  while(1)
  {
      printf("fts315\n");
  }
}

tambem usamos exit na source anterior para finalizar o processo filho se nao ele executaria o segundo while duas vezes (caso nao fosse um loop infinito), ja no windows e mais chato para criar thread pq tem usar 3 API CreateThread, ResumeThread e WaitForSingleObject para usar temos q declarar windows.h, o CreateThread como o nome diz ele cria a thread de uma funçao (diferente do fork q agente usa uma especie de condiçao), o ResumeThread serve para iniciar a thread pausada (a thread vai começar pausada), e o WaitForSingleObject ele serve para q o processo pai nao se finalize antes q o filho termine, tambem temos q criar duas variaveis uma DWORD para armazenar o TID (Thread ID) e outra HANDLE para pegar o handle da thread, vamos criar nossas variaveis primeiro

Código:
#include <stdio.h>
#include <windows.h>

int main(void)
{
  DWORD tid;
  HANDLE fts;
}

eu vou criar uma funçao para agente poder criar a thread dela vou chamar ela de fts_fun, tambem criar um loop no codigo principal

Código:
#include <stdio.h>
#include <windows.h>

void fts_fun(void)
{
  while(1)
  {
      printf("hacker\n");
  }
}

int main(void)
{
  DWORD tid;
  HANDLE fts;
 
  while(1)
  {
      printf("fts\n");
  }
}

agora vamos usar CreateThread para isso agente vamos passar como argumento 0 e 0 (esses dois nao sao importante por enquanto), e passar o nome da funçao (tambem temos q usar typecast aq para converter para LPTHREAD_START_ROUTINE), 0 (esse tambem nao e importante), e CREATE_SUSPENDED (essa constante permite criar a thread pausada caso vc deseja ela se execute assim q cria ela so colocar 0), e passar o endereço de memoria da variavel DWORD (pra isso colocamos & antes do nome), depois atribuimos a funçao a variavel

Código:
#include <stdio.h>
#include <windows.h>

void fts_fun(void)
{
  while(1)
  {
      printf("hacker\n");
  }
}

int main(void)
{
  DWORD tid;
  HANDLE fts;
 
  fts = CreateThread(0,0,(LPTHREAD_START_ROUTINE)fts_fun,0,CREATE_SUSPENDED,&tid);
 
  while(1)
  {
      printf("fts\n");
  }
}

para terminar agente usa ResumeThread e passamos como argumento a nossa variavel HANDLE depois colocamos WaitForSingleObject onde na parte q queremos q ela espera antes de executar no meu caso eu coloco no final do codigo tambem passamos como argumento para ela a variavel HANDLE e a costante INFINITE ou tempo em milesimos

Código:
#include <stdio.h>
#include <windows.h>

void fts_fun(void)
{
  while(1)
  {
      printf("hacker\n");
  }
}

int main(void)
{
  DWORD tid;
  HANDLE fts;
 
  fts = CreateThread(0,0,(LPTHREAD_START_ROUTINE)fts_fun,0,CREATE_SUSPENDED,&tid);
  ResumeThread(fts);
 
  while(1)
  {
      printf("fts\n");
  }
 
  WaitForSingleObject(fts,INFINITE);
}

bom galera isso e o basico de multi-thread em windows e linux, existe outras API e funçoes para manipular e criar thread ^^

by hacker fts315

https://endoffile.umforum.net

Ir para o topo  Mensagem [Página 1 de 1]

Permissões neste sub-fórum
Não podes responder a tópicos