A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução à Threads para Windows na linguagem C

Apresentações semelhantes


Apresentação em tema: "Introdução à Threads para Windows na linguagem C"— Transcrição da apresentação:

1 Introdução à Threads para Windows na linguagem C
Modularizando Threads em uma struct C Luiz Carlos d´Oleron

2 Introdução Nesta aula aprenderemos: Como usar Threads na Linguagem C;
Como criar um conjunto de artefatos que ocultem a complexidade do Sistema Operacional para programação multi-thread em C.

3 Motivação Gerenciamento de Threads e Processos é algo intrissecamente ligado ao Sistema Operacional Programas que utilizam técnicas Multi-Thread podem ter código nativo do SO espalhado e misturado com outros tipos de código (negócio, persistência, etc…) API de SO´s não são muito legíveis

4 Exemplo Excemplo1.c

5 Modularizando o código
Nas linguagens Orientadas a Objetos, tal como Java e C++, existem Classes que encapsulam as responsabilidades do Thread e do Sistema Operacional Essas Classes permitem Reuso, ao passo que podem ser Estendidas Em C, as coisas são um pouco mais difíceis, pois não possuímos algumas ferramentas valiosas, como Herança e Polimorfismo!

6 Classe Thread de Java Dando uma olhada na classe Thread de Java:

7 Modularizando o código
A idéia principal é criar uma struct em C que, junto com algumas funções, se pareça um pouco com a classe Thread de java Dessa forma, poderemos reutilizar a struct em nossas aplicações, ocultando nela os detalhes do Sistema Operacional Como?

8 A struct Thread typedef struct thread{
//um identificador para o Thread char* nome; //a funcao que deverá ser executada pelo Thread EnderecoFuncao* run; //um manipulador para o Thread //Utilizado, por exemplo, para saber se o Thread //ainda está vivo HANDLE handle; } Thread;

9 Funções para a struct //Construtor do Thread
Thread* newThread(char* nome, EnderecoFuncao* funcaoThread); //funcao start inicia a execução do Thread em //paralelo com a execução atual void start(Thread* t, void* parametros);

10 Funções para a struct //funcao faz o Thread atual dormir por no
//mínimo tempoEmMiliSegundos void sleep(int tempoEmMiliSegundos); //Faz a Thread atual aguardar pela conclusão do // Thread t void join(Thread* t); //Faz o Thread atual abdicar pela sua parcela atual // de tempo na CPU void yield();

11 Ops!!! Mais na classe Thread de java, run é um método, e não um atributo!

12 Explicando Em C, não há Herança. Para solucionar isso, usaremos algo que não é possível ser feito em java Definimos um Ponteiro para uma Função Assim nossa Thread em C poderá ser extensível, mesmo sem herança

13 Usando a struct Thread void funcaoSoma (void* param){ int i = 0;
char* nome = (char*) param; for(i = 0;i<10;i++){ printf("%s : %d \n",nome,i); yield(); } void funcaoSub (void* param){ for(i = 9;i>=0;i--){

14 Usando a struct Thread int main(int argc, char *argv[]) { Thread* t1 =
newThread(“ThreadSoma", funcaoSoma ); Thread* t2 = newThread(“ThreadSub", funcaoSub ); start(t1, t1->nome); start(t2, t2->nome); join(t1);//Aguarda t1 join(t2);//Aguarda t2 system("PAUSE"); }

15 Exemplo com struct Thread
O mesmo exemplo do slide 4 pode ser encontrado no Exemplo2.c, dessa vez, usando a struct Thread

16 A implementação A implementação das funções de Thread.h podem ser encontradas na classe Thread.c Lá estão isolados os detalhes do acesso ao Sistema Operacional

17 A implementação Foram utilizadas as seguintes funções da API do Windows: CreateThread GetExitCodeThread Sleep

18 A função CreateThread Cria uma Thread para executar em paralelo no processo que a chamou; HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId );

19 A função CreateThread Exemplo de chamada de CreateThread:
void funcao(void* p){...} ... char* parametros = “teste”; HANDLE handle = CreateThread(NULL,0, funcao, parametros,0,NULL);

20 A função CreateThread Para simplificar, daremos ênfase apenas aos parâmetros: lpStartAddress – a função que será executada pelo Thread lpParameter – Parâmetro que será passado para a função do Thread

21 A função GetExitCodeThread
Retorna o código de saída da Thread, usada para descobrir se o Thread já acabou de executar sua função; BOOL GetExitCodeThread( HANDLE hThread, LPDWORD lpExitCode );

22 A função GetExitCodeThread
Exemplo de uso de GetExitCodeThread: HANDLE handle = …; LPDWORD exitCode; GetExitCodeThread(handle,&exitCode); if(exitCode==STILL_ACTIVE){ printf(“Thread ainda Funcionando”); }else{ printf(“Thread Morto”); }

23 A função GetExitCodeThread
hThread– O “manipulador” da Thread. Componente que permite obter informações do ciclo de vida da Thread lpExitCode– Parâmetro que contém o código de saída do Thread. Se o Thread ainda estiver executando, lpExitCode será igual a STILL_ACTIVE

24 A função Sleep Similar ao método estático sleep da classe Java, a função Sleep fará a Thread atual adormecer por, no mínimo, o tempo especificado; VOID Sleep( DWORD dwMilliseconds );

25 A função Sleep Passar o valor zero para Sleep faz com que o Thread atual abdique de seu tempo na CPU, deixando para o SO decidir por um novo Thread a executar. Se nenhum outro Thread estiver disponível, a função retorna automaticamente, fazendo com que o Thread inicial volte à exeução; Usamos Sleep(0) para simular a função void yield().

26 A função Sleep Exemplo de uso de Sleep int tempo = 10000;
printf(“Fazendo o programa parar por no mínimo %d milisegundos\n”, tempo); Sleep(tempo); printf(“O programa parou por no mínimo %d milisegundos\n”, tempo);

27 Resumo Código que usar Thread em C irá depender do Sistema Operacional
Podemos usar structs e funções para modularizar e abstrair o código dependente do Sistema Operacional Assim o restante do código ficará mais limpo e flexível

28 Mais informações Muita coisa sobre Threads não foram vistas nessa aula
O exemplo apresentado poderá ser estendido, por exemplo, para contemplar sincronização e prioridades Procure mais informações nas fontes:


Carregar ppt "Introdução à Threads para Windows na linguagem C"

Apresentações semelhantes


Anúncios Google