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