entender onde esta o problema. Fiz esse programa de teste que tem a função de
contar até 50 e mostrar o resultado na tela. Ele funciona na primeira vez que aperto
o botão, na segunda que aperto o botão não faz nada.
- Código: Selecionar todos
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TMultLinha *MultLinha;
int tempo=100;
int conta=0;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1 -> Label1 -> Caption = "Começou!"; // Quando apertado o botão1 mostra no label1
// a palavra começou
conta = 0; // Zera a variável conta para que comece a contagem
// apartir do zero
MultLinha->Resume(); // inicia o thread
}
//---------------------------------------------------------------------------------------------------------------------------------------
//Inicializa o construtor da classe TMultlinha.
__fastcall TMultLinha::TMultLinha(bool CreateSuspended) : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TMultLinha::Execute()
{
//conta = 0;
while(conta<49) // Enquanto a variável conta for menor que 49...
{
conta++; // ...incrementa o valor de conta...
Form1->Label2->Caption = conta; // ... mostra o valor de conta no label2
Sleep(tempo); // ... espera um tempo e se ainda conta for menor que 50
// volta ao inícil do laço while
} // Fim do laço while
Form1 -> Label1 -> Caption = "Terminou!!"; // Quando termina a contagem mostra na label1 que terminou
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
MultLinha = new TMultLinha(true); // Aloca memória para o thread
MultLinha->Priority = tpNormal; // Define a prioridade.
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
MultLinha->Suspend(); // Finaliza o thread
}
//---------------------------------------------------------------------------
coloquei no arquivo .h a classe
- Código: Selecionar todos
class TMultLinha : public TThread
{
private:
protected:
void __fastcall Execute();
public:
__fastcall TMultLinha(bool CreateSuspended);
};
minha dúvida é, porque quando a contagem vai até o final (49), eu não consigo iniciar novamente se eu reseto todas as variáveis??
tem mais alguma coisa que deva fazer para poder funcionar??
outra coisa, tentei colocar um ShowMessage mas deu erro, não posso usar essa função com thread??
valeu galera!!!