Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-04-2015
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Garantizar de 1..N Instancias Activas en Memoria por Aplicación para Delphi y Lazarus

Club Delphi,

Revisen el siguiente código en Delphi:
Código Delphi [-]
unit SingleInstance;

interface

implementation

uses SysUtils, Forms, Dialogs, Windows;

const
   MutexName : String = 'Test_SingleInstance_Delphi';

var
   Mutex : THandle;

procedure CheckInstance;
begin

   if OpenMutex(MUTEX_MODIFY_STATE,false,PChar(MutexName)) = 0 then
   begin
      Mutex := CreateMutex(nil,False,PChar(MutexName));
      WaitForSingleObject(Mutex,INFINITE);
   end
   else
   begin
      MessageDlg('Existe una Instancia de la Aplicación Activa en Memoria',mtInformation,[mbOk],0);
      Application.Terminate;
   end;

end;

procedure FreeInstance;
begin
   if Mutex <> 0 then
   begin
      ReleaseMutex(Mutex);
      CloseHandle(Mutex);
   end
end;

initialization
  CheckInstance;

finalization
  FreeInstance;

end.
El código anterior en Delphi 7 Sobre Windows 7 Professional x32, permite tener una sola instancia activa en memoria de una aplicación.

Revisen el siguiente código en Lazarus:
Código Delphi [-]
unit SingleInstance;

{$mode objfpc}{$H+}

interface

implementation

uses SysUtils, Forms, Dialogs, Windows;

const
   MutexName : String = 'Test_SingleInstance_Lazarus';

var
   Mutex : THandle;

procedure CheckInstance;
begin

   if OpenMutex(MUTEX_MODIFY_STATE,false,PChar(MutexName)) = 0 then
   begin
      Mutex := CreateMutex(nil,False,PChar(MutexName));
      WaitForSingleObject(Mutex,INFINITE);
   end
   else
   begin
      MessageDlg('Existe una Instancia de la Aplicación Activa en Memoria',mtInformation,[mbOk],0);
      Halt;
   end;

end;

procedure FreeInstance;
begin
   if Mutex <> 0 then
   begin
      ReleaseMutex(Mutex);
      CloseHandle(Mutex);
   end
end;

initialization
  CheckInstance;

finalization
  FreeInstance;

end.
El código anterior en Lazarus Versión #:1.2.6 FPC Version 2.6.4 bajo Windows 7 Professional x32 , permite tener una sola instancia activa en memoria de una aplicación.

Nota:

1- Para tener una sola instancia de una aplicación tanto en Delphi como en Lazarus, solo debe agregarse la unidad SingleInstance al proyecto Delphi/Lazarus, la unidad ejecutara de forma automática el procedimiento CheckInstance al inicializarce y el procedimiento FreeMutex al finalizar.

2- Básicamente el código de Delphi y Lazarus es el mismo, solo varía en la forma de finalizar la aplicación.

3- MutexName, es el nombre de la aplicación para efectos de exclusión el cual debe ser único para las funciones de Mutex.

Revisen esta información:
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 02-04-2015 a las 23:33:50.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Evitar múltiples instancias en Lazarus Stereo100 Lazarus, FreePascal, Kylix, etc. 3 13-04-2015 09:40:18
Aplicación para Mac con Lazarus Jovalca Lazarus, FreePascal, Kylix, etc. 17 15-05-2014 21:32:28
FTP para subir archivos al servidor en DELPHI y me sirva para lazarus = koiji Delphi para la web 2 05-02-2013 16:52:06
Evitar abrir dos instancias en Lazarus pedrolazarus Lazarus, FreePascal, Kylix, etc. 7 17-11-2012 19:50:05
DCOM, instancias de una aplicación, Mensajes y Mapeo de ficheros en memoria Aldo OOP 0 15-09-2006 19:09:36


La franja horaria es GMT +2. Ahora son las 05:17:03.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi