Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con Hebras (https://www.clubdelphi.com/foros/showthread.php?t=80246)

LIGERO 12-09-2012 15:49:06

Problemas con Hebras
 
Buenas tardes amigos foreros:

Tengo un programa con una hebra que hace grabaciones en una base de datos sql server cada cuarto de hora y para ello utilizo la hebra.

Ver código.

Código Delphi [-]
unit Hebras;

interface

uses
  Classes;

type
  THebraCuartoHora = class(TThread)
      grabar : boolean;
      constructor Create; reintroduce; overload;
      procedure Execute; override;

  end;


var HebraCuartoHora : THebraCuartoHora;

implementation

 uses DateUtils, sysutils, globales, BBDDCogeneracion, logging;


constructor THebraCuartoHora.Create;
begin
   // llamamos al constructor del padre (TThread)
   inherited Create(True);
   grabar := true;

end;

procedure THebraCuartoHora.Execute;
var ahora: TdateTime;
    minutos, segundos : integer;


begin
  inherited;
  while not TerminarPrograma do
  begin
    ahora := now;
    minutos := MinuteOf(ahora);
    segundos := SecondOf(ahora);
    if ((minutos mod 15) = 0) and (segundos = 0) then
    begin
      // Incrementamos el contador de segundos y actualizamos la etiqueta
      if (grabar = true) then
      begin
        grabar := false;
        logger.log(elInfo,'::::::::::: Grabando Cuartos de Hora :::::::::::');
        try
          //InitializeCriticalSection(SeccionCritica);
          GrabaCuartosHora(ahora);
          //DeleteCriticalSection(SeccionCritica);
          logger.log(elInfo,'::::::::::: Cuartos de Hora Grabados :::::::::::');
        except
          logger.log(elerror,'******** Error Grabando Cuartos de Hora ********');
          grabar := true;
        end;
      end;
    end
    else
      grabar := true;
  end;
end;
end.

El problema es que la cpu se pone a 100% y baja bastante poco.

Qué puedo hacer.

WkaymQ48 12-09-2012 16:44:33

Pues deberías dejar descansar a la CPU :)

Prueba con esto:
Código Delphi [-]
  while not TerminarPrograma do
  begin
    Sleep(10); // <- Añadimos esta linea para decirle a windows que se lo tome con calma

LIGERO 13-09-2012 01:36:28

Muchas gracias WKaymQ48. La verdad es que es una gran idea. De hecho le he puesto 100 en vez de 10 y por ahora funciona de coña. He intentado tambien con un temporizador que se ejecute cada minuto y cuando llegara el minuto 14, 29, 44 o 59 se ejecutara la hebra y durante un minuto a lo sumo se ejecuta y vuelve a paralizarla hasta que se vuelva a cumplir la condición, pero no ha resultado en tiempo de ejecución, aunque sí en tiempo de depuración. Curioso pero cierto.

Si alguien puede dar otra respuesta que considere buena, se aceptan

Muchas gracias

Delphius 13-09-2012 04:17:57

¿Hebra? Como que le hemos pifiado... ¡Se les llama hilo! ¡HILO!

Saludos,


La franja horaria es GMT +2. Ahora son las 12:13:09.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi