• Jueves 14 de Noviembre de 2024, 23:01

Autor Tema:  Ejemplo De Hilo  (Leído 1667 veces)

seth_los

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Ejemplo De Hilo
« en: Jueves 15 de Enero de 2004, 23:46 »
0
Hola a todos Buenas tardes...

he estado buscando un ejemplo de TThread muy sencillo que tenga me nos de lo necesario (es un decir)... algo como esto quiero hacer una aplicacion que tengo un TButton un Label, y por medio del Button se pueda crear un contador... la idea esta que muestre en el formulario los valores del contador algo asi..
1 , 2 , 3 , 4 ,  5 .... en el caption de label esto se puede hacer muy facil usando TTimer pero no quiero usar este componente quiero hacerlo por medio de hilos osea un derivado de TThread... que cuando se use el boton comienze la aparicion de los numeros en el Label... la verdad si alguien me puede ayudar con este ejemplo se lo agradezco he mirado los ejeplos de builder pero la verdad no lo conprendo bien

Saludos a todos

_Viktor

  • Miembro MUY activo
  • ***
  • Mensajes: 271
    • Ver Perfil
    • http://AyudaCBuilder.foros.st
Re: Ejemplo De Hilo
« Respuesta #1 en: Viernes 16 de Enero de 2004, 18:22 »
0
Hola, puedes hecharle un vistazo a este ejemplo:

http://elvex.ugr.es/decsai/builder/threads/index.html

Es bastante sencillo de entender.
Saludos!
_Viktor _Yañez_
"Ser inteligente no es ser mas, solo equivocarse menos y no usar visual basic"

http]

_Viktor

  • Miembro MUY activo
  • ***
  • Mensajes: 271
    • Ver Perfil
    • http://AyudaCBuilder.foros.st
Re: Ejemplo De Hilo
« Respuesta #2 en: Viernes 23 de Enero de 2004, 01:00 »
0
Haber si esto te sirve:

Las dos siguientes corresponden al codigo del Thread, la funcion DisplayLabel es utilizada para sincronizar la vcl con el thread, cosa que en este caso no se puede hacer directamente...

Código: Text
  1.  
  2. //-------THREADED CPP------------------------------------------------------
  3.  
  4. #include <vcl.h>
  5. #include <Classes.hpp>
  6. #pragma hdrstop
  7.  
  8. #include "ThreadUnit.h"
  9. #pragma package(smart_init)
  10.  
  11.  
  12.  
  13. __fastcall TLabelThread::TLabelThread(bool CreateSuspended)
  14.         : TThread(CreateSuspended)
  15. {
  16. }
  17. //---------------------------------------------------------------------------
  18. void __fastcall TLabelThread::Execute()
  19. {
  20.   FreeOnTerminate = true;
  21.   for(Num=0;Num<=1000;Num++)
  22.    {
  23.      if(Terminated)break;
  24.      Synchronize(DisplayLabel);
  25.    }
  26. }
  27. //---------------------------------------------------------------------------
  28. void __fastcall TLabelThread::DisplayLabel()
  29. {
  30.  ThreadForm->Label1->Caption = Num;
  31. }
  32.  
  33.  

Código: Text
  1.  
  2. //---------THREADED H--------------------------------------------------------
  3.  
  4. #ifndef ThreadUnitH
  5. #define ThreadUnitH
  6. //---------------------------------------------------------------------------
  7.  
  8. #include <Classes.hpp>
  9. #include "ThreadFormUnit.h"
  10. //---------------------------------------------------------------------------
  11. class TLabelThread : public TThread
  12. {
  13. private:
  14. protected:
  15.         int Num;
  16.         void __fastcall Execute();
  17.         void __fastcall DisplayLabel();
  18. public:
  19.         __fastcall TLabelThread(bool CreateSuspended);
  20. };
  21. //---------------------------------------------------------------------------
  22. #endif
  23.  
  24.  

Lo que sigue corresponde al codigo del formulario principal, "Empezar" es un TButton.

Código: Text
  1. //-----FORMULARIO PRINCIPAL------------------------------------------
  2.  
  3. #include <vcl.h>
  4. #pragma hdrstop
  5.  
  6. #include "ThreadFormUnit.h"
  7.  
  8. //---------------------------------------------------------------------------
  9. #pragma package(smart_init)
  10. #pragma resource "*.dfm"
  11. TThreadForm *ThreadForm;
  12. TLabelThread *Thread;
  13. //---------------------------------------------------------------------------
  14. __fastcall TThreadForm::TThreadForm(TComponent* Owner)
  15.         : TForm(Owner)
  16. {
  17. }
  18. //---------------------------------------------------------------------------
  19. void __fastcall TThreadForm::EmpezarClick(TObject *Sender)
  20. {
  21.  Thread = new TLabelThread(false);
  22.  Thread->OnTerminate = OnTerminate;
  23.  Empezar->Enabled = false;
  24. }
  25. //---------------------------------------------------------------------------
  26. void __fastcall TThreadForm::OnTerminate(TObject *)
  27. {
  28.  Empezar->Enabled=true;
  29. }
  30.  

Haber si te queda un poco mas claro...
Saludos!
_Viktor _Yañez_
"Ser inteligente no es ser mas, solo equivocarse menos y no usar visual basic"

http]