Como interromper rotinas em C/C++

1. Como interromper rotinas em C/C++

Joao Pedro
itzmejp

(usa Ubuntu)

Enviado em 27/02/2014 - 15:44h

Estou a procura de como fazer interrupções em um código C/C++, digo interrupções porque já trabalhei com microcontroladores que possuíam este recurso, ou seja, gostaria de saber o nome que se dá, e como posso fazer.

Talvez, simplificando melhor, gostaria de fazer meu programa mudar sua rotina devido a alguma ação externa (valor de entrada de um sensor ou joystick por exemplo) e depois de executar tal ação, retornar ao programa padrão.

No que pesquisei, encontrei um conceito de Eventos, é isto mesmo?

Ajudas como links para estudo é bem vindo, obrigado.


  


2. Re: Como interromper rotinas em C/C++

Paulo
paulo1205

(usa Ubuntu)

Enviado em 28/02/2014 - 07:15h

itzmejp escreveu:

Estou a procura de como fazer interrupções em um código C/C++, digo interrupções porque já trabalhei com microcontroladores que possuíam este recurso, ou seja, gostaria de saber o nome que se dá, e como posso fazer.


Depende um pouco do SO.

Quase todo SO com o qual eu já trabalhei tem algum tipo de timer, que pode disparar um evento (pode ser uma interrupção de baixo nível, num sistema como o DOS, ou um sinal assíncrono, como no UNIX). Você poderia usar um timer periódico para testar a condição externa que lhe interessa, e voltar ao ponto original.

A maioria dos SOs modernos lhe oferece o recurso de múltiplas threads de execução dentro do mesmo processo e mecanismos para a interação de uma com as demais. Eventualmente, você poderia ter uma thread de controle de resposta em função de condições externas.

Para o exemplo que você deu, de um jogo e a ação sobre ele por meio de um joystick, pode ser que nada disso seja necessário. O Apple II, por exemplo, era um computador que não tinha timer programável, seu joystick analógico exigia um loop para ser lido, durante o qual nada mais se podia fazer, mas mesmo assim tinha uma coleção muito variada de jogos que exigiam resposta rápida (dos que eram possíveis na sua época, é claro). Como? Com um loop iterativo de controle do jogo, que tinha como uma das etapas a leitura dos controles, e as demais incluíam o redesenho da tela e o processamento de eventos aleatórios. Era porém importante que os tempos de execução das etapas do loop fossem mais ou menos constantes, para que a resposta do jogo não se alterasse de forma perceptível em diferentes situações.


3. Re: Como interromper rotinas em C/C++

Perfil removido
removido

(usa Nenhuma)

Enviado em 28/02/2014 - 21:35h

asm("xor..."); __asm("mov eax, 1");...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts