Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Los mejores trucos

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 04-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
Club Delphi,

Revisen este código:
Código Delphi [-]
unit SingleInstance;

interface

implementation

uses SysUtils, Forms, Windows, Dialogs;

const
  SemaphoreName : String = 'Semaphore_SingleInstance_Delphi/Lazarus';
  NumberInstance : Integer = 3;

var
  Semaphore: THandle;
  State : Boolean;
  MsgApp : String;

procedure CheckInstance;
begin

   Semaphore := CreateSemaphore(nil,NumberInstance,NumberInstance,PChar(SemaphoreName));
   if OpenSemaphore(EVENT_MODIFY_STATE,false,PChar(SemaphoreName)) <> 0 then
   begin
      if WaitForSingleObject(Semaphore,0) <> WAIT_OBJECT_0 then
      begin
         MsgApp := Format('El Número Máximo de Instancias de la Aplicación es %d',[NumberInstance]);
         MessageDlg(MsgApp,mtInformation,[mbOk],0);
         State := False;
         Halt;
      end
      else
         State := True;
   end;

end;

procedure FreeInstance;
begin
   if Semaphore <> 0 then
   begin
      if State then ReleaseSemaphore(Semaphore,1,nil);
      CloseHandle(Semaphore);
   end
end;

initialization
  CheckInstance;

finalization
  FreeInstance;

end.
El código anterior en Delphi XE7 Sobre Windows 7 Professional x32, permite por medio de un Semaphore definir el número de instancias activas en memoria de una aplicación en función de los requerimientos de la misma, según se muestra en la siguiente imagen con un máximo de 3 instancias permitidas en este caso:



Nota
:

1- Para controlar el número de instancias 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- El código propuesto funciona correctamente en Delphi 7 y Lazarus Versión #:1.2.6 FPC Version 2.6.4 bajo Windows 7 Professional x32.

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

4- NumberInstance, es el número de instancias máximas permitidas para una aplicación en función de sus requerimientos de performance y/o recursos.

5- Este código es una ampliación del código del Msg #1, ambos son equivalentes funcionalmente si el número de instancias (NumberInstance) es 1 .

Revisen esta información:
Espero sea útil

Nelson.
Responder Con Cita
 



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 08:40:18
Aplicación para Mac con Lazarus Jovalca Lazarus, FreePascal, Kylix, etc. 17 15-05-2014 20:32:28
FTP para subir archivos al servidor en DELPHI y me sirva para lazarus = koiji Delphi para la web 2 05-02-2013 15:52:06
Evitar abrir dos instancias en Lazarus pedrolazarus Lazarus, FreePascal, Kylix, etc. 7 17-11-2012 18:50:05
DCOM, instancias de una aplicación, Mensajes y Mapeo de ficheros en memoria Aldo OOP 0 15-09-2006 18:09:36


La franja horaria es GMT +2. Ahora son las 23:31:01.


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