Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Colaboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-04-2010
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 22
jplj Va por buen camino
TIdTCPClient - WirteStream simultáneo?

Hola

Quería hacer una pregunta -quizá obvia- sobre TIdTCPClient.WirteStream.

Tengo lo siguiente:
Código Delphi [-]
... Cliente:TIdTCPClient ... // En el evento OnTimer de un Timer con intervalos de 1 seg. Cliente.WriteStream( COMANDO_CADA_SEGUNDO ) // Procedimiento de escritura Cliente.WriteStream( COMANDO_XXX )
Por una parte cada segundo escribo un comando constante, y por otra parte a petición de la aplicación escribo otros.

Si se produce una escritura simultánea desde el evento OnTimer y desde el procedimiento el TIdTCPClient lo resolvería, o bien debo gestionarlo / impedirlo desde la aplicación.

Uso Delphi 7 / Indy 9

Muchas gracias de antemano.
__________________
Sonríe. Mañana puede ser peor.

Última edición por jplj fecha: 28-04-2010 a las 22:21:07. Razón: Indicar la versión de Delphi e Indy que utilizo
Responder Con Cita
  #2  
Antiguo 29-04-2010
Avatar de DarkMan
DarkMan DarkMan is offline
Miembro
 
Registrado: jul 2006
Posts: 102
Poder: 19
DarkMan Va por buen camino
Depende:

-Si existe un solo componente para manejar todas las operaciones y solamente interviene un hilo de ejecución.
-Si existe un solo componente para manejar todas las operaciones e intervienen varios hilos de ejecución.
-Si existe un componente determinado y diferenciado para cada hilo de ejecución.

En el primer y tercer caso no necesitarías manejar la concurrencia.
En el segundo caso si deberías manejar la concurrencia.

Si no te queda claro adelante, vuelve a preguntar.
__________________
"La recompensa de una buena acción está en haberla hecho"
Responder Con Cita
  #3  
Antiguo 29-04-2010
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 22
jplj Va por buen camino
Muchas gracias por la respuesta.

Los procesos de escritura se realizan con un solo componente y en el hilo principal (1º caso) , pero -simpre lo hay- tengo un hilo que usa el mismo componente para realizar lecturas (Cliente.ReadStream(...) ).

Código Delphi [-]
procedure TClientHandleThread.Execute;
begin
  while not Terminated do
  begin
    if not FCliente.Connected then
      Terminate
    else
    begin
      try
        FCliente.ReadBuffer(CB, SizeOf (CB));
//        Synchronize(HandleInput);
      except
      end;
    end;
  end;
end;

¿Podría haber problemas de concurrencia entre los procesos Cliente.WriteStream() del hilo principal y los procesos Cliente.ReadStream(...) del segundo hilo?
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
  #4  
Antiguo 29-04-2010
Avatar de DarkMan
DarkMan DarkMan is offline
Miembro
 
Registrado: jul 2006
Posts: 102
Poder: 19
DarkMan Va por buen camino
Cita:
Empezado por jplj
Los procesos de escritura se realizan con un solo componente y en el hilo principal (1º caso) , pero -simpre lo hay- tengo un hilo que usa el mismo componente para realizar lecturas (Cliente.ReadStream(...) ).
Entonces hablamos del 2º caso, podría existir un problema de concurrencia.

WriteStream o ReadStream, son funciones que requieren bastante tiempo. Al estar ejecutándose en hilos diferentes puede que se ejecuten simultáneamente, lo que podría provocar una serie de errores (que se mezclasen los datos o vete tú a saber, desconozco el funcionamiento interno de estos componentes indy, tal vez usen un mismo buffer para ambas funciones).

Lo correcto es que cuando termine una función, dé señal al otro hilo para utilizar la otra función y/o viceversa.

Espero haberte ayudado.
Un saludo.
__________________
"La recompensa de una buena acción está en haberla hecho"
Responder Con Cita
  #5  
Antiguo 29-04-2010
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Poder: 22
jplj Va por buen camino
Muchas gracias.
Echaremos mano de un mutex.
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita
Respuesta



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
Pregunta Teórica - Acceso simultaneo a tablas de una DB MaMu Conexión con bases de datos 4 04-12-2007 19:56:39
Acceso por miles de usuarios simultaneo HomeCinema Firebird e Interbase 0 06-02-2007 11:38:23
acceso simultaneo varios usuarios Tabla interbase hibero Conexión con bases de datos 15 04-12-2006 00:21:16
Acceso simultaneo a MySQl por internet jjaen26 Internet 0 21-09-2006 22:07:17
IB problemas por acceso simultaneo al mismo campo Giniromero Conexión con bases de datos 17 21-04-2004 11:17:20


La franja horaria es GMT +2. Ahora son las 01:11:13.


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