SoloCodigo
Programación General => C/C++ => C++ Builder => Mensaje iniciado por: kati en Domingo 17 de Junio de 2007, 14:09
-
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
-
se ve muy interesante gracias
-
fE dE errAtaS:
Hay un pequeño error en la 5 linea de EXECUTE, debe canviarse first por firsloop...
saludos