Ir al contenido



Foto

Eventos con Firedac

delphi firedac eventos events

  • Por favor identifícate para responder
No hay respuestas en este tema

#1 balger

balger

    Member

  • Miembros
  • PipPip
  • 11 mensajes

Escrito 08 agosto 2019 - 08:43

Tengo una problema al capturar de eventos. Algunos se pierden.

Pongo un ejemplo:

Recibo un evento en el cliente y se ejecuta correctamente el evento asociado.

Pero cada x tiempo pierdo algun evento.

 

El evento asociado tarda varios segundos en completarse, pueden ser como 10 segundos, ejecutando un par de querys, updates y commit, ademas de llamadas a reproducir sonido con mediaplayer y tambien uso SAPI de microsoft para Texto a voz. Obviamente si recivo uno o mas evento durante el procesamiento, marco el hecho y sin hacer nada mas, y al terminar el proceso actual, comienzo uno nuevo.

 

Algo de codigo:


delphi
  1. procedure TdmMain1.dbeventLLAMA_PERSONAAlert(ASender: TFDCustomEventAlerter; const AEventName: string; const AArgument: Variant);
  2. begin
  3. if CompareText(AEventName, 'LLAMA_PERSONA') = 0 then
  4. begin
  5. lNewAlert := True;
  6.  
  7. while lNewAlert and not lRunning do
  8. begin
  9. lNewAlert := False;
  10. lRunning := True;
  11. try
  12. ProcessCall;
  13. finally
  14. lRunning := False;
  15. end;
  16.  
  17. end;
  18.  
  19. end;
  20. end;


delphi
  1. procedure TfrmPerson.LlamaPersona(Sender: TObject; Descripcion, puesto: string);
  2. begin
  3. // Sound Alert
  4. if Length(mp1.FileName) > 0 then
  5. begin
  6. mp1.Open;
  7. mp1.Wait := True;
  8. mp1.Play;
  9. mp1.Close;
  10. end;
  11.  
  12. if UpperCase(Txt2Voz) = 'S' then
  13. TextoAVoz;
  14.  
  15. end;


delphi
  1. procedure TfrmPerson.TextoAVoz;
  2. var
  3. // SavedCW: Word;
  4. CoSuccess: HResult;
  5. begin
  6. CoSuccess := CoInitializeEx(nil, COINIT_MULTITHREADED);
  7. // http://stackoverflow.com/questions/3032739/delphi-sapi-text-to-speech// Solucion bug division por cero.
  8. // SavedCW := Get8087CW;
  9. // Set8087CW(SavedCW or $4);
  10.  
  11. SpVoice1.Speak('Atención. ' + dmMain1.Descripcion + ', consultorio' + dmMain1.puesto, 2);
  12.  
  13. CoUninitialize;
  14.  
  15. // Set8087CW(SavedCW);
  16.  
  17. end;


delphi
  1. procedure TdmMain1.DefEvent;
  2. begin
  3. dbeventLLAMA_PERSONA.Active := False;
  4. dbeventLLAMA_PERSONA.Options.Synchronize := False;
  5. dbeventLLAMA_PERSONA.Names.Clear;
  6. dbeventLLAMA_PERSONA.Names.Add('LLAMA_PERSONA');
  7. dbeventLLAMA_PERSONA.Options.Timeout := 0;
  8. dbeventLLAMA_PERSONA.Active := True;
  9. end;

Estoy perdiendo eventos y no se porque. 

Puede haber otra causal de la perdida de eventos.

Hay alguna forma de asegurarse que se reciban los todos eventos 

 

Estoy usando Berlin + FB2.5 Classic.

 

Actualmente soluciono el tema utilizando fuearza bruta (un query cada 3 segundos), el tema es que ahora tengo que poner 15 puestos mas, y no quiciera entorpecer tanto la red.

 

Apreciaré comentarios y experiencias


  • 0





Etiquetado también con una o más de estas palabras: delphi, firedac, eventos, events