• Jueves 24 de Junio de 2021, 17:39

Autor Tema:  SoluciÓn A Temporizar Thread En Milisegundos  (Leído 917 veces)

kati

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
SoluciÓn A Temporizar Thread En Milisegundos
« en: Domingo 17 de Junio de 2007, 14:09 »
0
Muy buenas!!!!
Aquí os paso una posible solución para temporizar un thread en milisegundos....ESPERO QUE OS SEA DE AYUDA..... es una posible solución sin utilizar timers... (no sé a ver que os parece....): :comp:
my.h
class Mythread : public TThread
{
private:

   SYSTEMTIME systime_Now;
   SYSTEMTIME systime_Start;

protected:

   void __fastcall Execute(void);
   void __fastcall UpdateLabel(void);

public:

   bool Cond;
   int i;
   long lNow;
   long lStart;
   bool firstloop;
   long dif;

   __fastcall Mythread(bool CreateSuspended);

};

my.cpp
__fastcall Mythread::Mythread(bool CreateSuspended)

: TThread(CreateSuspended)
{
   Cond = true;
   firstloop = true;
}
//---------------------------------------------------------------------------
void __fastcall Mythread::Execute(void)
{
   do
   {
      GetSystemTime(&systime_Start);
      if(first == true)
                {
         Synchronize(&UpdateLabel)
                        Sleep(600);// depende del tiempo de ejecución del thread...
                 }
      else
      {
         
         GetSystemTime(&systime_Now);
         lNow = systime_Now.wMilliseconds + 1000 * (systime_Now.wSecond
                       +60 * (systime_Now.wMinute + 60 * (long) systime_Now.wHour));
         dif = difftime(lNow, lStart);
         if(dif >= 1000) // que se ejecute cada segundo...
         {
              Synchronize(&UpdateLabel)
                             Sleep(600);// depende del tiempo de ejecución del thread...
                        }
      }
   }
   while(Cond == true);
}

//---------------------------------------------------------------------------
void __fastcall Mythread::UpdateLabel(void)
{
   lStart = systime_Start.wMilliseconds + 1000 * (systime_Start.wSecond +
    60 * (systime_Start.wMinute + 60 * (long) systime_Start.wHour));
    firstloop = false;
    /*
         introducir aquí el codigo de ejecución del thread
    */
    if(/*condición de salida*/) Cond = false;
} :ph34r:

bYE

weps84

  • Miembro MUY activo
  • ***
  • Mensajes: 138
    • Ver Perfil
Re: SoluciÓn A Temporizar Thread En Milisegundos
« Respuesta #1 en: Domingo 17 de Junio de 2007, 15:52 »
0
se ve muy interesante gracias

kati

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: SoluciÓn A Temporizar Thread En Milisegundos
« Respuesta #2 en: Domingo 17 de Junio de 2007, 15:56 »
0
fE dE errAtaS:
Hay un pequeño error en la 5 linea de EXECUTE, debe canviarse first por firsloop...
saludos