next up previous contents index
Next: Código-fonte: Exemplo de Utilização Up: Códigos-fonte Previous: Código-fonte: Exemplo de Utilização

Código-fonte: Exemplo de Utilização de Processos  


2517:463294 /* * The contents of this file are subject to the Mozilla Public License * Version 1.1 (the License); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an AS IS basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is the BananaKernel test implementation. * * The Initial Developer of the Original Code is the BananaKernel Developers * Group. Portions created by BananaKernel are Copyright (C) 2004 * BananaKernel Developers Group. All Rights Reserved. * * Contributor(s): */

#ifdef SIMPLES #include ../simples/bnnk.h #else #include ../intermediaria/bnnk.h #endif /* SIMPLES */
/* Variaveis globais que conterao os processo */ BNNK_proc *funcao1; BNNK_proc *funcao2;
/* Esta funcao imprime Funcao 1 - Hello World! na tela */
void  teste_03SC_funcao1teste_03SC_funcao1() { /* variaveis dentro dos processos devem ser STATIC */ static int i = 0;
for (i = 0; i < 10; i++) { printf(Funcao 1 - Hello World!\n); #ifndef SIMPLES bnnk_procstat(); #endif if (!(setjmp(funcao1->contexto))) { bnnk_swapproc(); } }
printf(Funcao 1 - FIM\n);
printf(Pressione qualquer tecla para continuar.\n); getchar();
bnnk_delproc(funcao1->descritor); }
/* Esta funcao imprime Funcao 2 - Goodbye World! na tela */
void  teste_03SC_funcao2teste_03SC_funcao2() { /* variaveis dentro do processo devem ser STATIC */ static int i = 0;
for (i = 0; i < 10; i++) { printf(Funcao 2 - Goodbye World!\n); #ifndef SIMPLES bnnk_procstat(); #endif if (!(setjmp(funcao2->contexto))) { bnnk_swapproc(); } }
printf(Funcao 2 - FIM\n);
printf(Pressione qualquer tecla para continuar.\n); getchar();
bnnk_delproc(funcao2->descritor); }
/* * Esta funcao adicona os dois processos na lista de processos e chama o * bnnk_swapproc para iniciar a execucao */
int  teste_03SCteste_03SC() { int funcao1_descritor = 0, funcao2_descritor = 0; int i = 0;
funcao1 = (BNNK_proc *) bnnk_malloc(sizeof(BNNK_proc)); funcao2 = (BNNK_proc *) bnnk_malloc(sizeof(BNNK_proc));
/* prepara os processos com os enderecos corretos das funcoes */ funcao1->endereco = &teste_03SC_funcao1; funcao2->endereco = &teste_03SC_funcao2;
#ifndef SIMPLES /* temos diferencas nas prioridades */ funcao1->prioridade = -3; funcao2->prioridade = 2; #endif /* SIMPLES */
funcao1_descritor = bnnk_addproc(funcao1); /* chama bnnk_addproc() * com a estrutura do * processo contendo a * funcao 1 */
printf(Pressione qualquer tecla para continuar.\n); getchar();
if (!funcao1_descritor) /* se nao incluiu o processo */ return -1; /* retorne -1 indicando um erro no * bnnk_addproc() */
funcao2_descritor = bnnk_addproc(funcao2); /* chama bnnk_addproc() * com a estrutura do * processo contendo a * funcao 2 */
if (!funcao2_descritor) return -1; /* retorne -1 indicando um erro no * bnnk_addproc( ) */
bnnk_procstat();
bnnk_swapproc(); /* aciona o escalonador */
return 0; /* retorna 0 indicando sucesso */ }


next up previous contents index
Next: Código-fonte: Exemplo de Utilização Up: Códigos-fonte Previous: Código-fonte: Exemplo de Utilização
rafael@safecore.net