ďťż

Ładny brzuch

Witam wszystkich :)
Borykam się z moją niewiedzą, a mianowicie:
chodzi o sprawdzenie wstrzymania lub zakończenia wątku w kodzie c++ builder.

W delphi dało się mniej więcej tak:

unit Unit1;
//[..]
type

  TWatek = class(TThread)
  protected
    procedure Execute; override;
    procedure Aktualizuj;
  end;
//[..]

  public
    Watek : TWatek;
  end;
//[..]

implementation
{$R *.dfm}

procedure TWatek.Aktualizuj;
begin
//[..]
end;

procedure TWatek.Execute;
begin
FreeOnTerminate:=TRUE;
while not Terminated do
begin
    Synchronize(Aktualizuj);
    Sleep(1000);
end;
end;

procedure TForm1.PauzaClick(Sender: TObject);
begin
  if not Watek.Terminated then
  begin
  if Watek.Suspended then Watek.Resume else Watek.Suspend;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Watek:=TWatek.Create(FALSE);
  Watek.Priority:=tpNormal;
end;
end.


Natomiast nie wiem jak zrobić to sprawdzenie w C++B
Poradziłem sobie ukrywając jeden i pokazując drugi przycisk,
ale nie jest to to samo.


__fastcall TWatek1::TWatek1(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}

TWatek1 *SecondThread = new TWatek1(false);

void __fastcall TWatek1::Aktualizuj(void)
{
SecondThread->Priority = tpLower;
//coś tam
}

void __fastcall TWatek1::Execute()
{
FreeOnTerminate=true;
while (!Terminated)
  {
    Synchronize(Aktualizuj);
    Sleep(500);
  }
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  SecondThread->Suspend();
  Form1->Button1->Visible=false;
  Form1->Button3->Caption="Przywróć";
  Form1->Button3->Visible=true;
}

void __fastcall TForm1::Button3Click(TObject *Sender)
{
  SecondThread->Resume();
  Form1->Button3->Visible=false;
  Form1->Button1->Caption="Wstrzymaj";
  Form1->Button1->Visible=true;
}


Jak należało by sprawdzić w tym przypadku stan wątku ?

Coś w stylu
if (SecondThread->!Terminated) { }
albo
if (SecondThread->Terminated == false) { }
wywala błąd, nie daje się skompilować.




wywala błąd, nie daje się skompilować.

Przy definicji klasy powinieneś mieć tak:class TWatek1:public TThread, a w niej:__property Terminated;.if (!SecondThread->Terminated)  if (SecondThread->Suspended)    SecondThread->Suspend(); else SecondThread->Resume();


__property Terminated;

Niewątpliwie o to chodziło!
Dziękuję za błyskawiczną odpowiedź :)

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •