Ver la versión completa : [Ayuda] Poltergeis con varios procesos Fenix.
Hola.
Tengo un Poltergeis con procesos Fenix :
BEGIN;
proceso_1();
proceso_2();
...
proceso_n-1();
proceso_n();
END;
Pues resulta que en la primera pasada por los procesos, solo ejecuta el 1 y el n, el resto no los ejecuta hasta la segunda pasada. Esto pasa con 3 procesos o mas.
No se como hacer que se ejecuten todos desde la primera pasada.
¿Alguien tiene alguna idea de que pasa?.
Gracias.
Saludos.
ponles a todos un frame; al principio, a ver que tal.
Aiken
ponles a todos un frame; al principio, a ver que tal.
Aiken
Hola.
Si lo pongo después del LOOP, funciona, pero se me lia la troca, al tener dos FRAMES en un proceso.
Sigo investigando.
Gracias.
SplinterGU
03/08/2010, 23:37
si queres que todos se ejecutan en el mismo frame, evidentemente no tenes que tener ninguna instruccion frame entre medio en ese mismo proceso.
como sea, deberias poner el codigo completo o por lo menos el codigo de esa funcion que te da problemas.
pero estoy seguro que entre las lineas de esa funcion, entre llamada y llamada tenes algun frame.
si queres que todos se ejecutan en el mismo frame, evidentemente no tenes que tener ninguna instruccion frame entre medio en ese mismo proceso.
como sea, deberias poner el codigo completo o por lo menos el codigo de esa funcion que te da problemas.
pero estoy seguro que entre las lineas de esa funcion, entre llamada y llamada tenes algun frame.
Hola.
Con esto ya me da problemas :
PROCESS buit();
BEGIN;
LOOP;
FRAME;
END;
END;
He probado varios códigos y da los mismos problemas, el primer proceso y el ultimo se ejecutan una vez mas.
Como decía Azul Y Negro "Me estoy volviendo loco".
Gracias.
Saludos.
La verdad es que no das muchas pistas: puede ser desde un simple error que se te haya olvidado un frame, que esté en otro orden, que el proceso padre no haga las llamadas porque no entra en IFs o que tengas un virus que no les gusta los procesos intermedios.
Para estos casos, si no el código original, sí que vendría bien un código resumido que reproduzca el mismo fallo, porque yo no veo ningún error ahi.
La verdad es que no das muchas pistas: puede ser desde un simple error que se te haya olvidado un frame, que esté en otro orden, que el proceso padre no haga las llamadas porque no entra en IFs o que tengas un virus que no les gusta los procesos intermedios.
Para estos casos, si no el código original, sí que vendría bien un código resumido que reproduzca el mismo fallo, porque yo no veo ningún error ahi.
Hola.
PROGRAM Processos;
GLOBAL;
INT loop1, loop2, loop3, loop4, loop5, loop6;
END;
BEGIN;
SET_TITLE("Processos");
SET_MODE(320,240,16,MODE_WINDOW);
SET_FPS(1,0);
proces_principal();
END;
PROCESS proces_principal();
BEGIN;
pinta_1();
pinta_2();
pinta_3();
pinta_4();
pinta_5();
pinta_6();
END;
PROCESS pinta_1();
BEGIN;
LOOP;
loop1 = loop1 + 1;
FRAME;
END;
END;
PROCESS pinta_2();
BEGIN;
LOOP;
loop2 = loop2 + 1;
FRAME;
END;
END;
PROCESS pinta_3();
BEGIN;
LOOP;
loop3 = loop3 + 1;
FRAME;
END;
END;
PROCESS pinta_4();
BEGIN;
LOOP;
loop4 = loop4 + 1;
FRAME;
END;
END;
PROCESS pinta_5();
BEGIN;
LOOP;
loop5 = loop5 + 1;
FRAME;
END;
END;
PROCESS pinta_6();
BEGIN;
LOOP;
loop6 = loop6 + 1;
DELETE_TEXT(0);
SET_TEXT_COLOR(RGB(255,255,255));
WRITE (0, 40, 5, 4, loop1);
WRITE (0, 80, 5, 4, loop2);
WRITE (0, 120, 5, 4, loop3);
WRITE (0, 160, 5, 4, loop4);
WRITE (0, 200, 5, 4, loop5);
WRITE (0, 240, 5, 4, loop6);
FRAME;
END;
END;
Los resultados del WRITE son :
1 1 1 1 1 1
1 1 1 1 1 2
2 2 2 2 2 3
3 3 3 3 3 4
...
O sea, el pinta_6 se ejecuta una vez mas y no se porque.
Gracias.
Saludos.
< - >
Hola.
Impresionante, con esto ya se arregla :
PROCESS pinta_6();
BEGIN;
LOOP;
loop6 = loop6 + 1;
DELETE_TEXT(0);
SET_TEXT_COLOR(RGB(255,255,255));
WRITE_VAR (0, 40, 5, 4, loop1);
WRITE_VAR (0, 80, 5, 4, loop2);
WRITE_VAR (0, 120, 5, 4, loop3);
WRITE_VAR (0, 160, 5, 4, loop4);
WRITE_VAR (0, 200, 5, 4, loop5);
WRITE_VAR (0, 240, 5, 4, loop6);
FRAME;
END;
END;
O sea cambiando el WRITE por WRITE_VAR. Si alguien tiene una explicación lógica ...
"Nunca te acostaras sin saber una cosa mas".
Gracias.
Saludos.
GameMaster
04/08/2010, 11:52
No pongas los writes en el loop, sólo la actualización de la variable... y ponlos en el main, fuera del proceso loop 6.
No pongas los writes en el loop, sólo la actualización de la variable... y ponlos en el main, fuera del proceso loop 6.
Hola.
El problema es con el WRITE (aunque lo ponga en el main). Si pongo WRITE_VAR ya va bien.
Gracias a todos.
Saludos.
< - >
Hola.
He seguido haciendo pruebas y si, el programa se comporta mejor poniendo esos WRITE_VAR en el main.
Gracias.
Saludos.
SplinterGU
04/08/2010, 17:49
el problema es que cuando usas write mandas a imprimir el estado que la variable tiene en ese momento, y por ende, pueden que los otros procesos aun no se hayan ejecutado, pero cuando usas write_var, el write se actualiza en el frame, o sea, que despues que todos los procesos hayan sido ejecutados, se imprime el valor, dentro de la instruccion principal frame del core.
como sea, supongo que esto te puede dar comportamientos no esperados, ya que no estas haciendo uso de las prioridades, te recomiendo usar la variable local priority para definir el orden en que se ejecutaran los procesos, porque una cosa es el write_var y otra diferente es el orden en que se estan ejecutando los procesos.
el problema es que cuando usas write mandas a imprimir el estado que la variable tiene en ese momento, y por ende, pueden que los otros procesos aun no se hayan ejecutado, pero cuando usas write_var, el write se actualiza en el frame, o sea, que despues que todos los procesos hayan sido ejecutados, se imprime el valor, dentro de la instruccion principal frame del core.
como sea, supongo que esto te puede dar comportamientos no esperados, ya que no estas haciendo uso de las prioridades, te recomiendo usar la variable local priority para definir el orden en que se ejecutaran los procesos, porque una cosa es el write_var y otra diferente es el orden en que se estan ejecutando los procesos.
Hola.
Gracias por la explicación, ya me ha quedado claro.
Da gusto tener cracks de la programación entre nosotros. Gracias a todos de nuevo.
Saludos.
PD: Pasate al Bennu de una vez!
PD: Pasate al Bennu de una vez!
Hola.
Me ha costado poner las librerías en su sitio, y descubrir que includes me hacían falta, pero ya he pasado el proyecto a Bennu, a ver que tal.
A ver si tu me acabas el Shock Troopers ;) ...
:brindis:
Pues la verdad es que el Lunes me piro de vacaciones a la playa y tengo intencion de relesear la version final antes de irme jejeje
Ahora mismo le estoy dando... es un rollo porque esta en Fenix, no entiendo ni la mitad del codigo que hice y ya no tengo los recursos graficos que necessito pero bueno...creo que serà una version digna... 20 Fases completas, todas las waves programadas y debilidad/fortaleza de cada tipo de disparo integrada. Incluso he hecho un apaño para que se vean los costes de cada soldado y su nivel de upgrade...
PD: Aunque la verdad es un palo retomar un codigo antiguo... la ultima vez que releseo algo a medias... palabra.
Pues la verdad es que el Lunes me piro de vacaciones a la playa y tengo intencion de relesear la version final antes de irme jejeje
Ahora mismo le estoy dando... es un rollo porque esta en Fenix, no entiendo ni la mitad del codigo que hice y ya no tengo los recursos graficos que necessito pero bueno...creo que serà una version digna... 20 Fases completas, todas las waves programadas y debilidad/fortaleza de cada tipo de disparo integrada. Incluso he hecho un apaño para que se vean los costes de cada soldado y su nivel de upgrade...
PD: Aunque la verdad es un palo retomar un codigo antiguo... la ultima vez que releseo algo a medias... palabra.
:babea:
Animo !!!!.
< - >
Una pregunta. Trabajo con el Flamebird en XP. Cuando pongo :
SET_MODE(320,240,16,MODE_FRAMELESS);
al ejecutar me sale la ventana con bordes y titulo (en Fenix no me pasa). ¿Es normal?.
Gracias.
Saludos.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.