Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Implementar TThread básico de espera (animacion) (https://www.clubdelphi.com/foros/showthread.php?t=97204)

Saltimbanki 03-02-2025 16:24:34

Implementar TThread básico de espera (animacion)
 
Hola, seria posible que alguien me pueda facilitar un fragmento de codigo para una aplicacion multihilo ??, por ejemplo, dos ProgressBar con dos botones que al pulsar cada boton haga correr cada barra, una con un intervalo de Sleep(1000) y otra con Sleep(500).

Gracias

Pd: My English is very little and with this code I'm going to the madness :eek::(:mad:

Thanks

Casimiro Noteví 03-02-2025 17:15:45

Puedes hacer el ejercicio preguntando al chatgpt

Neftali [Germán.Estévez] 03-02-2025 17:23:46

Ya que eres nuevo por aquí, te recomientdo que revises la Guía de estilo de los foros.
Incluye poner títulos descriptivos a los mensajes.

Por lo demás, ya te han comenado en el hilo anterior un mensaje que incluye bastantes referencias, donde puedes encontrar códigos sobre threads. Están en Delphi, pero si los revisas no es complicado pasarlos a C++Builder ya que las instrucciones son las mismas, pero con la sibtaxos de C++.
https://www.clubdelphi.com/foros/sho...ight=Threading


Igualmente si buscas en los foros, encontrarás algunos hilos sobre Threads en el foro de C++, por ejemplo este:
http://www.clubdelphi.com/foros/showthread.php?t=30192
(seguramente habrá más).

NOTA: Actualizao el título del mensaje.

Neftali [Germán.Estévez] 03-02-2025 17:29:01

Cita:

Empezado por Casimiro Notevi (Mensaje 561678)
Puedes hacer el ejercicio preguntando al chatgpt


Incluso, he visto que si le das este código del ejemplo que hay aquí:
https://neftali.clubdelphi.com/ejemp...-sin-utilidad/



Código Delphi [-]
type

  //: Clase para definir un Thread con prograssBar
  TProgressBarThread = class(TThread)
  private
    pb: TProgressBar;
    FStep: Integer;
  protected
    procedure Execute; override;
    procedure MoveTh;
  public
    property Step:Integer read FStep write FStep;
    constructor Create(Box: TProgressBar; AStep:Integer; ThreadPriority: TThreadPriority);
  end;
...


implementation

uses
  graphics;

{ TProgressBarThread }
constructor TProgressBarThread.Create(Box: TProgressBar; AStep:Integer;
                                      ThreadPriority: TThreadPriority);
begin
  inherited Create(False);
  Self.FStep := AStep;
  pb := Box;
end;

procedure TProgressBarThread.Execute;
begin

    while true do begin
      Synchronize(MoveTh);
      Sleep(50);
    end;

end;

procedure TProgressBarThread.MoveTh();
begin
  pb.Position := (pb.Position + FStep) MOD 100;
end;

Y le dices que te lo traduzca a C++Builder, saca algo que al menos está en C++ :D:D

Código:

#include <vcl.h>
#pragma hdrstop
#include <tchar.h>
#include <Classes.hpp>
#include <ComCtrls.hpp>

class TProgressBarThread : public TThread
{
private:
    TProgressBar *pb;
    int FStep;
protected:
    void __fastcall Execute();
    void __fastcall MoveTh();
public:
    __fastcall TProgressBarThread(TProgressBar *Box, int AStep, TThreadPriority ThreadPriority);
    __property int Step = {read=FStep, write=FStep};
};

__fastcall TProgressBarThread::TProgressBarThread(TProgressBar *Box, int AStep, TThreadPriority ThreadPriority)
    : TThread(false)
{
    FStep = AStep;
    pb = Box;
    Priority = ThreadPriority;
}

void __fastcall TProgressBarThread::Execute()
{
    while (true)
    {
        Synchronize(&MoveTh);
        Sleep(50);
    }
}

void __fastcall TProgressBarThread::MoveTh()
{
    pb->Position = (pb->Position + FStep) % 100;
}

Habrá que ver sio lo que sale finalmente tiene sentido...

chenech 03-02-2025 19:58:55

Un ejemplo bastante simple que cada 5 segundos actualiza un label con la hora, añade un botón y verás que sigue operativo mientras se va actualizando el label:
Código PHP:

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <System.Threading.hpp>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponentOwner)
    : 
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    
_di_ITask tasks[1];
    
tasks[0] = TTask::Create([&] ()
    {
        
Prueba();
    });
    
tasks[0]->Start();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Prueba(void)
{
        
Sleep(5000);
        
Label1->Caption Time();
}
//--------------------------------------------------------------------------- 



La franja horaria es GMT +2. Ahora son las 16:24:44.

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