Ejecutar un programa sólo una vez

Started by Coptroner, October 09, 2013, 08:04:15 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Coptroner

Una cosa que no me acuerdo de como se hace, a ver si me podeis refrescar la memoria... ¿que instrucción se usa para que no se pueda ejecutar mas de una instancia del interprete a la vez?  ???
Quiero que, una vez abierto un programa, no se pueda abrir otro igual hasta cerrar el primero.

Gracias!

SplinterGU

desde bennugd, actualmente no se puede...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Yawin

Pero podrías hacer que cuando se abra el programa, genere en la carpeta de temporales un archivo que elimine al cerrarse. Y que si ese archivo ya existe no quiera abrirse. Por ejemplo.
Sigue el desarrollo de mi motor RPG: https://www.youtube.com/watch?v=TbsDq3RHU7g

process main()
       begin
           loop
               pedo();
               frame;
            end
       end

SplinterGU

eso no sirve... si la aplicacion muere, apagan la maquina, etc queda el archivo... por eso dije que actualmente no se puede...

hay muchas forma de hacerlo desde otros lenguajes, pero desde bennugd no hay por ahora.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

warrior_rockk

Se podría hacer que las instancias se "comunicaran" entre si para pedir permiso de ejecución mediante ese archivo que mencionáis. La segunda instancia pide "permiso" para ejecutarse cambiando un valor del archivo. Si existe otra instancia que se ha ejecutado antes, lee esa petición y la deniega, y así la otra instancia muere. Si se hubiera apagado el PC o no existiera ninguna instancia previa, tras un "timeout" de no recibir respuesta de permiso, se daría el permiso a la instancia automáticamente.

SplinterGU

implementar toda la comunicacion es mas complicado...

puedes usar un socket y ver si ya esta abierto, pero ahi corres el riesgo que otra aplicacion este usando ese socket... lo mejor es usar semaforos nominados, y ver si ya existen al ejecutar una instancia nueva... cuando la instancia muere el semaforo tambien...

repito, actualmente no se puede hacer con bennugd.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Erkosone

Usa una variable de entorno, no ensucias el disco y hace lo mismo, si es en windows mirate el comando 'SET', puede que te sirva.

SplinterGU

nop, las variables de entorno son de tu entorno... otra terminal, otras variables.... no sirve eso.

en android creo que si te sirve, pero en PC no va...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Coptroner

Entonces estaba yo confundido... ???

Recuerdo algo muy vagamente en los comandos para ejecutar el bgdi, al igual que podemos arrancar una aplicacion con o sin acceso a la consola de comandos, pero a lo mejor lo he soñado yo esto o era cosa de Fenix... jajajaja

Igualmente gracias por vuestras respuestas  ;D

warrior_rockk

SplinterGu, creo que Erkosone se refiere a las variables de entorno del SO, en el ejemplo del SET, a las del entorno Windows. Creo que sería una buena solución. Esas variables temporales de entorno desaparecen al apagar la maquina, y las instancias las pueden consultar/eliminar.

SplinterGU

#10
Quote from: warrior_rockk on October 13, 2013, 09:36:05 AM
SplinterGu, creo que Erkosone se refiere a las variables de entorno del SO, en el ejemplo del SET, a las del entorno Windows. Creo que sería una buena solución. Esas variables temporales de entorno desaparecen al apagar la maquina, y las instancias las pueden consultar/eliminar.

repito nuevamente, las variables de entorno que seteas con SET solo afectan a tu instancia, no son globales.

si desde tu instancia seteas variables y lanzas desde la misma instancia otro ejecutable si se ven... pero si haces un SET desde una aplicacion, ese SET no afecta a otras aplicaciones....
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

kim-elet-o

Hmmmm, en linux se podria comprobar con el comando ps si se esta ejecutando el proceso/instancia del juego, no lo he probado pero me parece que como se ejecuta es el intreprete de bennu deberia salir algo como bgdi, y siempre y cuando no se corriera otro juego/aplicacion bennu a la vez.
|/
|\im-elet-o el yayo programador.

SplinterGU

#12
todos los metodos por nombre de ventana, nombre de ejecutable y demas, no son 100% efectivos, porque alguien podria crear una aplicacion con el mismo titulo de ventana o mismo nombre de binario y no funcionaria el metodo... ni que decir si se busca por parte de la string (como ser un ps -ef|grep nombre).
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Bueno, pero si por línea de comandos se puede hacer, basta con generar un .bat o un .sh que al invocar al BGDI se haga con el parámetro o el comando de sistema adecuado. Sólo hay que tener cuidado de que el usuario no ejecute directamente el BGDI (fácil si se evitan todas las formas de autoejecución, como el renombrar el BGDI, poner el nombre genérico a dcb, etc...), cosa imposible si ya se ha asociado los dcb a los bcd, pero ¿quién ha hecho eso hasta ahora? XD

Si no, al módulo de exec habría que añadirle dicha funcionalidad. Creo que es el único módulo sistema-dependiente ¿no?
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)