OO Engenharia Eletrônica



Documentos relacionados
OO Engenharia Eletrônica

Pilhas. Profa Morganna Diniz

Esta apresentação ensinará os conceitos de Orientação a Objetos com C++, do mais básico para o mais avançado. É suposto que o aluno já tenha

INTRODUÇÃO AO C++ SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Orientação a Objetos - Programação em C++

Programação em C/C++

Componentes da linguagem C++

Linguagem de Programação III

Linguagem C++ Estruturas de controle Parte II Estruturas de repetição

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

ITENS FUNDAMENTAIS. Profª Angélica da Silva Nunes

INFORMÁTICA APLICADA AULA 02 LINGUAGEM DE PROGRAMAÇÃO C++

Programação com Posix Threads

Guia e Utilização do Visual Studio 6.0

Manual do Desenvolvedor Criptografia de Arquivos do WebTA

Prof. Jhonatan Fernando

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

Sistemas Operacionais I

Orientação a Objetos Programação em C++

Fundamentos de Programação II. Introdução à linguagem de programação C++

Programação científica C++

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Orientação a Objetos - Programação em C++

Olimpíadas de Informática

Conceitos de Linguagens de Programação

INTERFACE PARA ECF SWEDA

Programando em C++ Histórico da Linguagem C

Introdução à Programação

INF PROGRAMAÇÃO II LISTA DE EXERCÍCIOS 15

Programação de Computadores I. Ponteiros

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

Desenvolvimento OO com Java Orientação a objetos básica

Como foi exposto anteriormente, os processos podem ter mais de um fluxo de execução. Cada fluxo de execução é chamado de thread.

Fundamentos de Programação Linguagem C++ Entrada e saída com arquivos

Computação L2. Arquivos. Observação: Material da Disciplina Computação Eletrônica CIN/UFPE.

Sistemas Operacionais

É a associação de mais de um fluxo de execução em um único processo.

Programação de Computadores Primeiros Passos Práticos em C++

Computação e Programação Aula prática nº 5. Enunciados dos problemas

Técnicas de Programação:

Engenharia de Software

Arquivos de Textos no C - Básico

PADI 2015/16. Aula 1 Introdução à Plataforma.NET

Aula 28: Arquivos de texto

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

Programação Orientada a Objetos Threads

Introdução a Computação

Programação científica C++

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA

ESTRUTURA COM DECISÃO COMPOSTA

Resumo da Introdução de Prática de Programação com C. A Linguagem C

cast poderia ser usado também para transformar um real (float) em inteiro. A sintaxe C (float)i pode ser substituída em C++ por float(i).

Algoritmos e Programação

THREADS EM JAVA. George Gomes Cabral

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++

Estruturas de Dados Aula 15: Árvores 17/05/2011

Programação Estruturada e Orientada a Objetos. Tratamento de Exceções

INF 1005 Programação I

José Romildo Malaquias

Aula 01. Programação Condicional Programação repetitiva

Fundamentos de Programação

LÓGICA DE PROGRAMAÇÃO PARA ENGENHARIA INTRODUÇÃO À PROGRAMAÇÃO COM C/C++ Prof. Dr. Daniel Caetano

Aula 30 - Sockets em Java

Java Threads. Introdução

Expressões. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Programação Concorrente Processos e Threads

Threads e Concorrência em Java (Material de Apoio)

Tipos de Dados Simples

Algoritmos e Técnicas de

Java. Marcio de Carvalho Victorino

Exercício 1. Tabela 1: Cadastro de usuários, senhas e privilégios (exemplo). Login Senha Privilégio Armamento

Carlos Eduardo Batista. Centro de Informática - UFPB

Estruturas de Dados. Parte dos slides a seguir são adaptações, extensões e traduções para C dos originais:

(Aula 17) Threads em Java

Transcrição:

OO Engenharia Eletrônica - Programação em C/C++ Slides 18: Introdução à Multithreading. Introdução à Multithreading: execução concorrente de tarefas. Exemplos usando a biblioteca C Run-time library. Prof. Jean Marcelo SIMÃO, DAELN/UTFPR Aluno monitor: Vagner Vengue.

C Run-time library C Run-time libraries faz parte da Microsoft Run-time Library. O Microsoft Run-time Library provê rotinas para programar o sistema operacional Microsoft Windows. Estas rotinas automatizam muitas tarefas comuns de programação que não são providas pelas linguagens C e C++ [Microsoft Visual C++ Help].

C Run-time library Esta biblioteca provê funções para a criação de threads e processos no Windows, ou seja, internamente ela utiliza as funções da Win32 API. A sua vantagem está na forma simples como as funções são apresentadas, fornecendo um certo nível de abstração da API do Windows. Para operações mais avançadas sobre threads, tais como criação de objetos de sincronização ou controle de prioridade, deve ser utilizado a Win32 API.

Funções básicas para threads

Threads C Run-time library _beginthread uintptr_t _beginthread( void( *start_address )( void * ), unsigned stack_size, void *arglist ); Cria e executa uma thread. Parâmetros: start_address: função que a thread deve executar. (ponteiro de função) stack_size: quantidade inicial de memória que a thread precisará. Pode ser passado 0(zero) para usar o valor padrão. arglist : parâmetro passado para a função que executa a thread.

Threads C Run-time library _beginthreadex uintptr_t _beginthreadex( void *security, unsigned stack_size, unsigned ( *start_address )( void * ), void *arglist, unsigned initflag, unsigned *thrdaddr ); Cria e executa uma thread. Parâmetros: security: atributos de segurança. Pode ser passado NULL para usar os valores padrões. (mesmos atributos da Win32 API). stack_size: quantidade inicial de memória que a thread precisará. Pode ser passado 0(zero) para usar o valor padrão. start_address : função que a thread deve executar (ponteiro de função). arglist : parâmetro passado para a função que executa a thread. initflag: flag que indicam o estado inicial da thread. Deve ser passado 0(zero) para indicar que a thread deve ser iniciada automaticamente. thrdaddr : ponteiro para um inteiro identificador da thread. Pode ser NULL.

Threads C Run-time library _endthread e _endthreadex As threads são encerradas ao completar a tarefa ou com o término do processo, no entanto, também podem terminar a si mesmas, utilizando funções próprias para isto. As funções a seguir encerram as threads criadas por _beginthread e _beginthreadex respectivamente.

void _endthread( void ); Threads C Run-time library _endthread e _endthreadex Encerra uma thread criada por _beginthread, liberando os recursos alocados para a thread. void _endthreadex( ); Encerra uma thread criada por _beginthreadex, porém, não libera os recursos alocados para a thread, exigindo a utilização da função CloseHandle da Win32 API. Parâmetros: unsigned retval retval : código de saída da thread. Zero indica o término normal.

Exemplos

Exemplo 01 #include <iostream> // biblioteca para CRuntime Library; #include <process.h> using namespace std; bool thread_ligada; // função passada como parâmetro para // nova thread; void escrevealgo(void *p) while ( thread_ligada ) cout <<"Executando thread... << endl; int main() cout << "Digite ENTER para iniciar e " << "parar a thread..." << endl; // aguarda um ENTER do usuário; cin.get(); thread_ligada = true; // inicia uma thread, passando como parâmetro a função que deve ser executada; _beginthread(escrevealgo, 0, NULL); cin.get();// aguarda um ENTER do usuário; // informa a thread que ela deve parar; thread_ligada = false; return 0;

Resultado do programa Exemplo 01. Exemplo 01

Exemplo 02 #include <iostream> // biblioteca para CRuntime Library; #include <process.h> using namespace std; bool thread_ligada; // função passada como parâmetro para a // nova thread; void escrevealgo(void *p) while ( true ) cout <<"Executando thread... << endl; if (!thread_ligada ) // termina a thread explicitamente; _endthread(); int main() cout << "Digite ENTER para iniciar e " << "parar a thread..." << endl; // aguarda um ENTER do usuário; cin.get(); thread_ligada = true; // inicia uma thread, passando como parâmetro a função que deve ser executada; _beginthread(escrevealgo, 0, NULL); cin.get();// aguarda um ENTER do usuário; // informa a thread que ela deve parar; thread_ligada = false; return 0;

Resultado do programa Exemplo 02. Exemplo 02

Exemplo 03 #include <iostream> #include <process.h> #include <windows.h> using namespace std; // biblioteca para usar funções de CRuntime Library; bool thread_ligada; HANDLE hnd_thread; // identificador da thread; // função passada como parâmetro para nova thread; unsigned WINAPI escrevealgo(void *p) while ( thread_ligada ) cout << "Executando thread..." << endl;

Exemplo 03 int main() cout << "Digite ENTER para iniciar e parar a thread..." << endl; cin.get(); // aguarda um ENTER do usuário; thread_ligada = true; // inicia uma thread, passando como parâmetro // a função que deve ser executada; hnd_thread = (HANDLE) _beginthreadex( NULL, // atributo de segurança; 0, // quantidade inicial de memória para a thread; &escrevealgo,// função a ser executada; NULL, // parâmetro da thread; 0, // estado inicial da thread; NULL // identificador da thread; ); cin.get(); thread_ligada = false; // aguarda um ENTER do usuário; // informa a thread que ela deve parar; if ( NULL!= hnd_thread ) WaitForSingleObject(&hnd_thread, INFINITE); CloseHandle( hnd_thread ); return 0;

Resultado do programa Exemplo 03. Exemplo 03

Exemplo 04 #include <iostream> #include <windows.h> #include <process.h> using namespace std; // função passada para a thread 2; unsigned WINAPI tarefa_2( LPVOID lpparam ) //----------------------- REGIÃO CRÍTICA HANDLE meu_mutex; WaitForSingleObject(meu_mutex, INFINITE); for (char* s = "ABCDEF"; *s!= '\0'; s++) // função passada para a thread 1; unsigned WINAPI tarefa_1( LPVOID lpparam ) cout << *s; //--------------------- REGIÃO CRÍTICA ReleaseMutex( meu_mutex ); WaitForSingleObject(meu_mutex, INFINITE); //--------------------------------------- for (char* s = "123456"; *s!= '\0'; s++) cout << *s; ReleaseMutex( meu_mutex ); //------------------------------------

int main() HANDLE hndthread_1, hndthread_2; Exemplo 04 cout << "Digite ENTER para iniciar as threads..." << endl; cin.get(); // aguarda um ENTER do usuário; meu_mutex = CreateMutex(NULL, FALSE, NULL); if ( NULL == meu_mutex ) cout << "Erro ao criar o mutex." << endl; return 0; // inicia as threads, passando como parâmetro // o "id" da thread e a função que cada uma deve executar; hndthread_1 = (HANDLE) _beginthreadex(null, 0, tarefa_1, NULL, 0, NULL); hndthread_2 = (HANDLE) _beginthreadex(null, 0, tarefa_2, NULL, 0, NULL); // faz com que a thread principal espere a 'thread_1' e a 'thread_2' acabarem; if ( NULL!= hndthread_1 ) WaitForSingleObject(hndThread_1, INFINITE); if ( NULL!= hndthread_2 ) WaitForSingleObject(hndThread_2, INFINITE); CloseHandle( hndthread_1 ); CloseHandle( hndthread_2 ); CloseHandle( meu_mutex ); cin.get(); // aguarda um ENTER do usuário; return 0;

Resultado do programa Exemplo 04. Exemplo 04

Bibliografias relativas a Threads. Microsoft Developer Network C Run-time Functions for Thread Control. Disponível em: <http://msdn.microsoft.com/enus/library/7t9ha0zh(v=vs.80).aspx>. Acesso em: 19 nov 2010. Microsoft Developer Network Multithreading with C and Win32. Disponível em: <http://msdn.microsoft.com/enus/library/y6h8hye8(v=vs.80).aspx>. Acesso em: 19 nov 2010. Microsoft Developer Network C Run-time Reference. Disponível em: <http://msdn.microsoft.com/enus/library/59ey50w6(v=vs.80).aspx>. Acesso em: 19 nov 2010.