?
hallo,
erzeuge per assi (datei neu -> objectgalerie) ein neues gerüst für den thread. die methode TThread::Execute() ist quasi das hauptprogramm des thread, das solange durchlaufen wird, bis der thread terminiert oder pausiert wird. starten tut man den thread durch erzeugen der threadinstanz:
MyThread = new TThread(false); //durch übergabe des parameters kann man steuern, ob der thread sogleich gestartet wird, oder ob nur eine instanz erzeugt wird.
MyThread = new TThread(true); //erzeugt nur thread-instanz.
MyThread->Resume(); //startet den thread.
//will man den thread pausieren lassen:
MyThread->Suspend();
//will man eine gewisse routine durchlaufen wenn der thread terminiert wird:
MyThread->OnTerminate = ThreadOnTerminate; //weißt man ihm eine routine zu, die dann ausgeführt wird, sobald das ereignis OnTerminate eintritt.
//im konstruktor des threads kann man angeben ob der thread bei terminierung auch gleich freigegeben werden soll:
__fastcall TMyThread::TMyThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
FreeOnTerminate = true;
}
//die methode TThred::Execute() wird solange durchlaufen bis der thread terminiert wird, da kann dann etwa sowas dring stehen:
void __fastcall TMyThread::Execute()
{
FCount = 1;
do
{
Synchronize(GuiElements); //synchronize ist für die synchronisation da.
FCount++;
}
while (FCount <= 200000);
}
//alles was auf vcl-elemente zugreift sollte in einer methode durchgeführt werden (hier GuiElements), diese wird dann der Methode Synchronize übergeben. dies ist sehr wichtig, damit alle zugriffe etc. synchron mit dem hauptthread der vcl verlaufen...
mfg
murph