Toon posts:

[BC6] TThreads...

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik zou graag willen weten hoe ik een TThread in de praktijk kan gebruiken. Het enige wat ik wil is een Thread die een MessageBox toont, wanneer de Thread wordt gestart. Met een knop wil ik de Thread kunnen stoppen en met een andere starten. Dit is wederom in JAVA erg simpel, maar in C++ wil het niet lukken. Weet iemand hoe ik zo een TThread kan maken?

Ik weet dat er een (groot) aantal topics over is geopend, en ook op het Internet beschikbaar zijn, maar ik kan geen simpel voorbeeld vinden dat zich alleen op de TThread richt.

Wat er wel gelukt is: File|New|Other|ThreadObject heb ik opgevolgd, en ik had een button aangemaakt, waar als je er opklikte een nieuw mijnThread object aanmaakte(via mijnThread ding; en via mijnThread *ding; , maar ik wist niet welke ik moest gebruiken. Als ik weet hoe ik er een kan aanmaken, dan lukken andere natuurlijk ook wel.

(ik heb het vb. TThread van Borland ook al gezien)

[ Voor 6% gewijzigd door Verwijderd op 08-01-2003 22:14 ]


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Ik heb totaal geen ervaring met BC6, maar ik denk dat ik wel veilig kan zeggen dat je zowiezo mijnThread *ding moet gebruiken. Anders zal de thread gestopt worden als de variabele out of scope gaat (aan het eind van de functie die m definieert dus).

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

mijnThread *ding = new mijnThread(False); ofzoiets, maar dit is pretty basic en heeft niets echt met threads te maken, maar met het instantieeren van classes.

Een thread stopt zelf al als de code die uitgevoerd wordt klaar is, als je niets meer dan een ShowMessage erin zet zal het daarna meteen stoppen.

Ow, en vergeet natuurlijk ook niet de instanties die je gemaakt hebt met new weer vrij te geven met free als je er klaar mee bent. Iets wat niet automatisch gebeurd in c++ integenstelling tot java

[ Voor 25% gewijzigd door LordLarry op 08-01-2003 22:33 ]

We adore chaos because we like to restore order - M.C. Escher


  • whoami
  • Registratie: December 2000
  • Laatst online: 10:22
LordLarry schreef op 08 January 2003 @ 22:32:
Ow, en vergeet natuurlijk ook niet de instanties die je gemaakt hebt met new weer vrij te geven met free als je er klaar mee bent. Iets wat niet automatisch gebeurd in c++ integenstelling tot java


delete that is, in C++ ;)

Trouwens, moet je VCL objecten zelf vrijgeven? Ik weet het niet zeker, maar ik dacht het niet.... :?

https://fgheysels.github.io/


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Verwijderd schreef op 08 January 2003 @ 22:06:
Ik zou graag willen weten hoe ik een TThread in de praktijk kan gebruiken. Het enige wat ik wil is een Thread die een MessageBox toont, wanneer de Thread wordt gestart. Met een knop wil ik de Thread kunnen stoppen en met een andere starten. Dit is wederom in JAVA erg simpel, maar in C++ wil het niet lukken. Weet iemand hoe ik zo een TThread kan maken?
In BCB is het volgens mij nog simpeler dan in Java. TThread introduceert een pure virtual protected method Execute(), en die moet je overloaden met je eigen threadfunctie. Ergo:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class TMyThread : public TThread
{
protected:
  virtual void Execute()    { ShowMessage("BIER!"); }  
};

void __fastcall TForm1::Button1Click(TObject* Sender)
{
if(m_MyThread)
  {
  // Wacht tot thread klaar is
  m_MyThread->Wait();
  delete m_MyThread;
  }
m_MyThread = new TMyThread;
}

Je moet 'm wel even deleten, alleen components (TComponent derivants dus) werken op het owner-mechanisme omdat die een voorgeschreven hierarchische structuur hebben: threads hebben die bij uitstek logischerwijs niet omdat hun lifetime die van de parent-thread kan overstijgen. Deleten doe je even in de destructor, en dit voorbeeld gaat ervan uit dat je m_MyThread (member van type TMyThread* of TThread*) initialiseert op NULL in de constructor of OnCreate van je form.

Professionele website nodig?