FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
evitar doble ejecucion en el programa...
Saludos
tengo una pregunta para implementar el codigo de evitar doble ejecucion de la aplicacion por medio de semaforos, en mi caso en la forma principal ejecuto en el evento Oncreate codigo para las excepciones, y en el evento onshow lo uso para lanzar una forma de password. el codigo de semaforos es este: procedure TfrmPrinc.FormCreate(Sender: TObject); var Sem : THandle; begin Sem := CreateSemaphore(nil,0,1,'PROGRAM_NAME'); if ((Sem <> 0) and (GetLastError = ERROR_ALREADY_EXISTS)) then begin CloseHandle( Sem ); ShowMessage('This program is already running.'+ 'Este programa ya se está ejecutando...'); Halt; end; end; lo que hice es declarar un procedimiento llamado procedure Ejecucion(); en la seccion private del form principal, y luego lo llamo en oncreate Ejecucion; Application.OnException:= EcepcionException; CargarDiccionario(ExtractFilePath(Application.ExeName) + NombreDiccio); //para que capte las excepciones. se ejecuta sin problemas pero si lo ejecuto otra vez me da el error programado de doble ejecucion pero despues me da el error que ha efectuado operacion no admitida, y el error runtime error 216 at 000587b9. yo lo probe en una aplicacion sencilla en oncreate y funciona por que no le estoy agregando mas codigo de las excepciones, ahora que lo estoy implementando no resulta, hay algo para evitar esto. mucha gracias. |
|
|
|