![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
|
tengo una preguntota de 100000 dollares se pueden crear dos clases en un mismo form o datamodulo ?? gracias por la respuesta
![]() |
|
#2
|
||||
|
||||
|
Hola Julyus.
Si. Siempre que las clases no tengan el mismo nombre. si no te va dar error de identificador redeclarado. Es decir que podés hacer: Código:
type Clase1 = class end; Clase2 = class end; ClaseN = class end; Código:
type
Clase1 = class
end;
Clase1 = class // identifier redeclarer 'clase1'
end;
Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 03-08-2010 a las 02:05:31. |
|
#3
|
||||
|
||||
|
Casi me olvido !!!!
Donde me depositas los u$s 100000 ??? ![]() Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#4
|
||||
|
||||
|
Basta con que te des una vuelta por el directorio de la VCL (normalmente en: "c:\Archivos de programa\Borland\Delphi6\Source\Vcl\" o similar) y mires alguno de los ficheros.
StdCtrls.pas, por ejemplo, no sólo tiene más de 1 clase, sino que tiene todas (o casi todas) las clases de los componentes de la paleta Standard de Delphi.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#5
|
||||
|
||||
|
hola el problema se me presenta en las clases TFixedConnectionPool y TCleanupThread si ven una necesita de la otra y si las cambio de posicion pasa lo contrario es la otra la que no la reconoce ose ano me la deja declarar por que ????
gracias por la ayuda
|
|
#6
|
||||
|
||||
|
Hola de nuevo Julyus.
Aca esta el código no me dá errores (de compilación) . Lo reestructuré un poco para mayor legibilidad, no probé la ejecución. En el código está la línea (1) que soluciona la referencia cruzada entre las clases FixedConnectionPool y TCleanupThread. Código:
unit Unit2;
interface
uses
SysUtils, Classes, ADODB, syncobjs, Windows , DB, Dialogs;
type
IConnection = Interface(IInterface)
function Connection: TADOConnection;
function GetRefCount: Integer;
function GetLastAccess: TDateTime;
property LastAccess: TDateTime read GetLastAccess;
property RefCount: Integer read GetRefCount;
end;
TFixedConnectionPool = class; // (1) * LINEA ADICIONADA *
TCleanupThread = class(TThread)
private
FCleanupDelay: Integer;
protected
CriticalSection: TCriticalSection;
FixedConnectionPool: TFixedConnectionPool;
procedure Execute; override; { FALTABA IMPLEMENTAR }
constructor Create(CreateSuspended: Boolean;
const CleanupDelayMinutes: Integer);
end;
TFixedConnectionPool = class(TObject)
private
FPool: array of IConnection;
FPoolSize: Integer;
FTimeout: LargeInt;
CleanupThread: TCleanupThread;
Semaphore: THandle;
CriticalSection: TCriticalSection;
public
constructor Create(const PoolSize: Integer = 10;
const CleanupDelayMinutes: Integer = 5;
const Timeoutms: LargeInt = 10000); overload;
destructor Destroy; override;
function GetConnection: IConnection;
end;
TDataModule2 = class(TDataModule, IConnection)
private
protected
FRefCount: Integer;
FLastAccess: TDateTime;
CriticalSection: TCriticalSection;
Semaphore: THandle;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
{IConnection methods}
function GetLastAccess: TDateTime; { FALTABA IMPLEMENTAR }
function GetRefCount: Integer; { FALTABA IMPLEMENTAR }
public
function Connection: TADOConnection; { FALTABA IMPLEMENTAR }
end;
var
DataModule2: TDataModule2;
implementation {$R *.dfm}
function TDataModule2.Connection: TADOConnection;
begin
// IMPLEMENTAR
end;
function TDataModule2.GetLastAccess: TDateTime;
begin
// IMPLEMENTAR
end;
function TDataModule2.GetRefCount: Integer;
begin
// IMPLEMENTAR
end;
function TDataModule2._AddRef: Integer;
begin
CriticalSection.Enter;
try
Inc(FRefCount);
Result := FRefCount;
finally
CriticalSection.Leave;
end;
end;
function TDataModule2._Release: Integer;
begin
CriticalSection.Enter;
try
Dec(FRefCount);
Result := FRefCount;
if Result = 0 then
Destroy
else
Self.FLastAccess := Now;
finally
CriticalSection.Leave;
if FRefCount = 1 then
ReleaseSemaphore(Semaphore, 1, nil);
end;
end;
constructor TFixedConnectionPool.Create(const PoolSize: Integer = 10;
const CleanupDelayMinutes: Integer = 5;
const Timeoutms: LargeInt = 10000);
begin
FPoolSize := PoolSize;
FTimeout := Timeoutms;
Semaphore := CreateSemaphore(nil, PoolSize, PoolSize, '');
CriticalSection := TCriticalSection.Create;
SetLength(FPool, PoolSize);
CleanupThread := TCleanupThread.Create(True, CleanupDelayMinutes);
with CleanupThread do
begin
FreeOnTerminate := True;
Priority := tpLower;
FixedConnectionPool := Self;
Resume;
end;
end;
constructor TCleanupThread.Create(CreateSuspended: Boolean;
const CleanupDelayMinutes: Integer);
begin
// always create suspended
inherited Create(True); // always create suspended
FCleanupDelay := CleanupDelayMinutes;
//Resume if not created suspended
if not CreateSuspended then
Resume;
end;
function TFixedConnectionPool.GetConnection: IConnection;
var
i: Integer;
DM: TDataModule2;
WaitResult: Integer;
begin
Result := nil;
WaitResult := WaitForSingleObject(Semaphore, FTimeout);
if WaitResult <> WAIT_OBJECT_0 then
raise Exception.Create('Connection pool timeout. '+ // EConnPoolException: Identificador desconocido
'Cannot obtain a connection'); // reemplazo por Exeption
CriticalSection.Enter;
try
for i := Low(FPool) to High(FPool) do
begin
if FPool[i] = nil then
begin
DM := TDataModule2.Create(nil);
DM.CriticalSection := Self.CriticalSection;
DM.Semaphore := Self.Semaphore;
FPool[i] := DM;
FPool[i].Connection.Connected := True;
Result := FPool[i];
Exit;
end;
if FPool[i].RefCount = 1 then
begin
Result := FPool[i];
Exit;
end;
end;
finally
CriticalSection.Leave;
end;
end;
destructor TFixedConnectionPool.Destroy;
var
i: Integer;
begin
//Free any remaining connections
CleanupThread.Terminate;
CriticalSection.Enter;
try
for i := Low(FPool) to High(FPool) do
FPool[i] := nil;
SetLength(FPool,0);
finally
CriticalSection.Leave;
end;
CriticalSection.Free;
//Release the semaphore
CloseHandle(Semaphore);
inherited;
end;
procedure TCleanupThread.Execute;
begin
inherited;
// IMPLEMENTAR
end;
end.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... Última edición por ecfisa fecha: 03-08-2010 a las 20:12:45. |
|
#7
|
||||
|
||||
|
ecfisa, si utilizas la etiqueta [ DELPHI ] en lugar de la de [ CODE ] te resalta las palabras reservadas.
Sólo es un comentario. No se si lo desconoces o que te va mejor utilizar la de [ CODE ] ![]() ![]()
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
#8
|
||||
|
||||
|
Cita:
Quizá sea algún problema de configuración de mi navegador, voy a hacer algo que debería haber hecho antes: Postear el problema en Varios. Gracias por la observación. Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#9
|
||||
|
||||
|
Cierto, no sale bien si se le da al botón de vista previa
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#10
|
||||
|
||||
|
hola amigos gracias por sus respuestas me han servido mucho de ayuda pude cuadrar la unidad y bueno recorde cosas que hace rato no hacia en delphi
mil gracias. julian abreo ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Algunos videos para pasar el rato | Faust | Humor | 3 | 24-06-2010 05:09:49 |
| ¿como programo el puerto serial con delphi + ensamblador? | candia | ASM y Microcontroladores | 11 | 23-04-2008 08:07:47 |
| ¿Como programo un boton Aceptar? | Carmen | Conexión con bases de datos | 9 | 03-11-2004 22:11:32 |
| En que programo? | Caljim | Varios | 13 | 09-08-2004 20:32:05 |
|