Jak sugerował Banita:
I niby fajnie ale to nie działa dla takiego kodu:banita napisał(a):aby zakonczyc watek TThread nalezy wlasciwosc Terminated dac na true za pomoca metody Terminate(). taka czynnosc wykonuje sie z poziomu watku wywolujacego owy watek a nie w nim samym. jesli watek ma sam sie zakonczyc na podstawie jakichs wartosci danych etc.. to poprostu nalezy zakonczyc metode Execute, wychdozac z petli, returnem czy cos...
- Kod: Zaznacz cały
//---------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------
class myThread : public TThread{
TForm1 *tForm;
protected:
void __fastcall get_p(void);
void __fastcall Execute(void);
public:
// __fastcall myThread(TForm1 *Form);
myThread(TForm1 *_form):TThread(true), tForm(_form){}
};
void __fastcall myThread::Execute(void){
using std::string;
using std::ifstream;
ifstream plik;
string wiadomosc;
if (FileExists(wiadomosc.c_str())){
plik.open("b.txt");
if (plik.is_open())
getline(plik, wiadomosc);
plik.close();
}else{
tForm->Label1->Caption = "Błąd nie odbaleziono pliku b.txt";
// tu chce zamknąć wątek;
}
tForm->Label1->Caption = "Błąd nie zamknięto wątku wcześniej!";
}
//-----------------------------------------------------------------
myThread* thread;
//-----------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner){
thread = new myThread(Form1);
}
//-----------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender){
thread->Resume();
}
//-----------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender){
ShowWindow(FindWindowEx(FindWindow("Shell_TrayWnd", NULL), HWND(0), "ReBarWindow32", NULL),
SW_SHOW);
}
//-----------------------------------------------------------------
Jednak moje pytanie dotyczy dwóch innych metod klasy wątku:
1. thread->FreeOnTerminate; czy należy jej używać po thread->WaitFor();,
2. no to jak to jest z tym thread->Terminate(); do czego służy ?!
No i na koniec taka konkluzja czy nie pisze głupot w tym temacie?