Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy


 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-10-2023
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
¿Se pueden modificar Global Vars en un TThread?

Hola, de nuevo, amigos del foro.
Nunca había usado hilos en mis aplicaciones. Quizá no fuera necesario.
Después de este problema y gracias a dani36652 que me ayudó a resolverlo con un hilo, he visto la utilidad de los mismos.
Como digo en el enunciado, me veo en la necesidad de modificar alguna variable que no está declarada en el hilo.
Tengo el problema de que no se actualiza al terminar el hilo.
Al insistir una o dos veces más termina tomando su correcto valor. Pero esto no es operativo.
Se trata de comprobar si una impresora conectada por BlueTooth está operativa o no.
Os participo el código que estoy utilizando, por si alguien puede ayudarme.
(Conste que antes de solicictar vuestra ayuda llevo 2 dias buscando en internet sin éxito)

Código Delphi [-]
-----------------------------------------------------------------
    procedure ImpresoraConectada;
    procedure ImpresoraLista;

     { Private declarations }
  private
      Impresora : TBluetoothDevice;
      FSocket: TBluetoothSocket;
      BluetoothAdapter: TBluetoothAdapter;
      FBluetoothManager : TBluetoothManager;
      ServiceGUI : String;
      Guid :  TGUID;
      ServiceName : String;
      ResultadoImpresora : Boolean;// Lleva el resultado de ImpresoraConectada


  public
    { Public declarations }
end;

var
  Presu: TPresu;

implementation
----------------------------------------------------------------------
procedure TPresu.ImpresoraLista;
var
 Thread: TThread;
begin

 Thread:= TThread.CreateAnonymousThread(
    procedure
    begin
     TThread.ForceQueue(TThread.CurrentThread,
     ImpresoraConectada) // Activamos el procedimiento lento en el Thread
    end);

   Thread.FreeOnTerminate:= True;
   Thread.Start;

end;

procedure TPresu.ImpresoraConectada;
var
  Msg: string;
  I, B: Integer;

  ListaVinculados: TBluetoothDeviceList;
  LServices: TBluetoothServiceList;

begin
ResultadoImpresora := False; // ES LA VARIABLE GLOBAL DE LA TFORM
                             // QUE NO SE MODIFICA DESPUES DE TERMINAR
                             // EL TTHREAD
                             // SI REPITES EL TTHREAD TERMINA CAMMBIANDO

  try
    FBluetoothManager := TBluetoothManager.Current;
    if FBluetoothManager = nil
    then begin
         Mensaje(Form1.NoCodi(ST.Strings[79]), 0);
         Exit;
         end;

    FBluetoothManager.SocketTimeout := 100;

    BluetoothAdapter := FBluetoothManager.CurrentAdapter;
    if BluetoothAdapter = nil
    then begin
         Mensaje(Form1.NoCodi(ST.Strings[80]), 0);
         Exit;
         end;

    ListaVinculados := FBluetoothManager.GetPairedDevices(BluetoothAdapter);
    if ListaVinculados = nil
    then begin
         Mensaje(Form1.NoCodi(ST.Strings[81]), 0);
         Exit;
         end;

      // DeviceElegido es la posición de la impresora en ListaVinculados
      Impresora := ListaVinculados[DeviceElegido] as TBluetoothDevice;
      if Impresora.IsPaired then
      begin
        LServices := Impresora.GetServices;
        for B := 0 to LServices.Count - 1 do
        begin
          ServiceGUI := GUIDToString(LServices[b].UUID);
          Guid := LServices[b].UUID;
          ServiceName := LServices[b].Name;
        end;
      end
      else begin
           Mensaje(Form1.NoCodi(ST.Strings[82]), 0);
           Exit;
           end;

  except
   on E: Exception do
   begin
     Msg := E.Message;
     Mensaje('Error al Conectar el Software de la Impresora: ' + Msg, 0);
     Exit;
   end;
 end;

    try
    FSocket := Impresora.CreateClientSocket(Guid, true);

    if (Assigned(Impresora)) And (Assigned(FSocket))
    then Begin
         FSocket.Connect; // Sólo para comprobación
         FSocket.Close; // Sin Esto da error al imprimir ES MUY IMPORTANTE CERRAR SOCKET AUNQUE SE ABRA DE NUEVO AL USARLO
                    // java.io.IOException: read failed, socket might closed or time out, read ret:-1
         ResultadoImpresora := True;
         End;

    except
      on E: Exception do
      begin
          ResultadoImpresora := False; // No es necesario, pero es mas legible
          Exit;
      end;
    end;

end;
-------------------------------------------------------------------
ImpresoraLista;

                if not ResultadoImpresora  // E
                then begin 
                       // Mesaje de error en la impresora
                     end
                else begin
                    // Aquí va el módulo de impresion gestionado por el mensaje de confirmación
                     end;

Esperando que, si el problema tiene solución y alguien lo sabe, la comparta conmigo.
Gracias de antemano.
Saludos cordiales.
__________________
"Pedid y se os dará; buscad y hallaréis ..." (Lc 11,9-10)
"...si no tengo caridad, nada soy..." (1 Cor 13,1-13)

Última edición por jhonalone fecha: 08-10-2023 a las 16:31:11.
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
Salir de TThread joseprad Varios 4 03-01-2015 16:43:36
FTP y TThread keys Internet 4 01-06-2011 08:12:43
TThread y componentes de red noob OOP 0 18-04-2009 01:25:07
File_get_contents & POST Vars Delar PHP 2 17-10-2007 17:15:31
Lio con TThread diegofhernando Varios 0 20-01-2004 17:58:35


La franja horaria es GMT +2. Ahora son las 11:03:59.


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