[PSP] como podría realizar llamadas periodicas a una funcion?

como podría realizar llamadas periodicas a una funcion en psp?
llamada();
sceKernelDelayThread(500000);
llamada():

etc?

[poraki]
jjejejje gracias mañana mismo lo pruebo ( que sueño)
:D
sceKernelDelayThread(S*1000*1000);


"S" sera el numero de segundo que deseas esperar

salu2
Dark_Fran escribió:sceKernelDelayThread(S*1000*1000);


"S" sera el numero de segundo que deseas esperar

salu2


no tengo ni idea de programación en PSP, pero no podría ser más comodo así?:

sceKernelDelayThread(S*1000000)

es como si digo

S*10*10*10*10*10*10

Vamos, creo que no me equivoco.

Un saludo.
Está bien esto, pero tengo un problema, y es que el hilo se queda bloqueado. cosa que no me interesa....

el caso es que sabeis si la funcion time funciona bien? igual teniendola en un bucle infinito sería mejor y bueno como mucho el desfase sería de un de milisegundos, inapreciable al oido humano...

que creeis?

EDIT:

acabo de probarlo y nada se ve que el time de time(&t); no funciona porque me da el tiempo en segundos y necesito algo mas concreto
La función clock() devuelve el número de ciclos de reloj transcurridos.
Sabiendo los Mhz podrías calcular el tiempo(creo que la macro CLOCKS_PER_SEC o algo parecido).Es de la librería .

Por ej:

void periodica(double t_rep)
{
static clock_t t_ant = clock();

clock_t t_act = clock();
double tiempo = (double)(t_act - t_ant)/CLOCKS_PER_SEC;
if( tiempo >= t_rep )
llamada();
t_ant = t_act ;
}

No se si es lo que preguntas pero es lo que he entendido

;-)

PD: Al ser el reloj de la PSP variable no se si la macro funcionaría bien
gracias por la idea probé una parecida y nada :(

pero hay una clase que te proporciona el reloj en tiempo real y te da tiempo en microsegundos, segundos, minutos... etc... mi problema sería que debería jugntar microsegundos, segundos y minutos...


alguien sabe la formula?
time_t comienzo,contador;
comienzo=time(NULL);
while(1) {
contador=time(NULL);
if(contador==(comienzo+4)) {
funcion();
comienzo=time(NULL);
}
}

no lo probe pero supongo que funcionara, esto ejecutaria la funcion cada 4 segundos ( si no recuerdo mal devuelve en segundos time )
jejej gracias, pero la solución parecida está puesta y no vale porque necesito más precisión como mínimo del milisegundo... pero gracias igualmente
gracias de nuevo por la aportación pero es lo que estoy gastando actualmente en realidad quiero algo como pasar a time_t eso he visto que hay una funcion pero... creo que tiene un bug así que...
ufff
en fin
alguien sabe como puedo programar varios hilosssssssssssss....
porke nose como va en la psp... io cuando programava en c bajo linux usaba el fork..

gracias
esto que tiene que ver aquí?
saulotmalo escribió:esto que tiene que ver aquí?


Pues mucho, porque lo que tu esta pidiendo (que se llame de forma regular a una funcion) tiene tres formas de hacerse:

1) Crear un handler a una interrupcion que se llame frecuentemente y con mucha regularidad (o sea, desde un timer, que seguro que se puede en PSP, aunque yo no conozco como va el tema de los timers ni nada del hardware, que por cierto, me vendría bien saber)

2) La segunda es igual que la primera, excepto que se utiliza una llamada que active un hilo desde el handler de interrupcion del timer. Esto sirve cuando nuestra funcion necesita cumplir ciertas reglas que no le permiten ser llamada desd un handler de interrupcion directamente.


3) Por ultimo tienes la posibilidad de hacerlo tal y como te lo recomendaban al principio, pero creando un hilo y encerrando la funcion de espera y tu funcion a llamar con un while eterno.



La mas precisa es la opcion 1, seguida de la 2 y luego de la tres.

La opcion 1, es buena si lo que quieres es gobernar una serie de contadores por software o actualizar el desplazamiento de un objeto de forma regular y tu funcion es muy rapida y sabes que no va a demorarse mucho, afectando al uso de otras interrupciones

La opcion 2 lo que haria es despertar un hilo que tendria que tener una alta prioridad para que se despertase lo mas rapidamente posible, sin sufrir demoras por parte de otros hilos que tuvieras en ejecucion.

En la opcion 3 tambien seria muy recomendable que la prioridad del hilo fuese muy alta, puesto que el hilo esta suspendido durante la ejecucion de la funcion de espera y lo que queremos es que cuando pase el tiempo, el hilo despierte en cuanto sea posible, interrumpiendo la ejecucion de otro hilo si es necesario.

Si tu funcion combina una seccion de codigo que sea critica con el tiempo, deberia mantene la prioridad mas alta durante ese tramo, pero si luego en otra parte de la funcion no importa tanto la regularidad del tiempo y quieres permitir "oxigenar" otros hilos (tal vez tengas un hilo que está reproduciendo musica y quieras evitar que se produzca un silencio) lo ideal sería bajar la prioridad del hilo en ese punto y volver a subir la prioridad justo antes de llamar a la funcion de espera.

De esta forma, consigues que en un sistema multihilo se mantenga esa temporizacion que necesitas, sin que eso trabaje en contra de otros hilos que tengas en ejecucion (sonido, main, etc) y tdo va a depender mas de la precision que tengan los temporizadores de la PSP (seguramente, tenga una desviacion decimal, pero eso es inevitable en todos los sistemas y siempre se puede corregir teniendo en cuenta la desviacion XD)

PD: A ver si me pongo a mirar un poco la PSP, que me apetece hacer algunas cosillas, aunque estoy tan despistado con esta maquina, que no se donde encontrar informacion buena sobre su hardware XD
¿Por curiosidad nos puedes decir para qué quieres realizar llamadas periódicas a una función? Es que aparte de actualizar la pantalla y el audio en un juego no le veo mucho sentido...
es para una aplicacion a medida para un amigo ... nada demasiado xungo luego la sacaré para todos y la verdad es que me interesaría poder usarla ahora acabo de venir de 24 horas de viaje y he leido un par de funciones interesantes pero el jetlag me esta matando ... lo de los hilos y tal está interesante pero muy complicado para lo que quiero, quizas solamente hago mini timers entonces con los milisegundos y segundos me sobra.

un saludo
16 respuestas