Ver Mensaje Individual
  #2 (permalink)  
Antiguo 18/12/2005, 20:41
Avatar de caerolus
caerolus
 
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 20 años, 2 meses
Puntos: 1
Una forma de hacerlo sería usando la misma página para todo, diferenciando por una variable GET la acción a ejecutar: procesar o esperar. Al entrar intentas coger un mutex; si puedes cogerlo realizas la opción q sea, si no quiere decir que estás ejecutando aun.
Un mutex es un mecanismo de exclusión, de forma que sólo el proceso que lo tenga puede ejecutar. El resto esperará hasta que quede libre el mutex. La forma más fácil de hacer esto con PHP es crear un directorio (proceso que el sistema operativo ya hace exluyentemente).
Código PHP:
if(!mkdir("cerrojo")){ // Coger mutex (crear directorio)
  // el mutex ya está cogido
  
if($_GET['action'] == "procesar"){
    
// Si puede haber dos procesamientos a la vez, ejecutar directamente
    // Si no pueden procesar a la vez esperar y volver a intentarlo
    
while(!mkdir("cerrojo")){
      
wait(1000); // Un segundo, lo que quieras
    
}
    
// Aquí el procesamiento en ambos casos
  
}else{
    
// Aun se está procesando, generar la página de espera
    // Mediante javascript, refrescar la página recordando el parámetro GET
  
}
}else{
  if(
$_GET['accion'] == "procesar"){
    
// Todo el procesamiento aqui
  
}else{
    
// Aquí la página de resultados
  
}
  
rmdir("cerrojo"); // Liberar el mutex (borrar directorio)

No recuerdo como refrescar la página con javascript, era algo de meta equivalent o algo así.
Un saludo
__________________
Mi página personal: Julián Urbano