Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C++] meerdere units/threads

Pagina: 1
Acties:

  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
Hallo,

Ik zit met het probleem met meerdere units en headers!
Ik moet een applicatie schrijven waar threads voor nodig zijn, al gaan threads best ver boven mijn algemene kennis, maar het moet nu eenmaal.
Ik heb hier een mooi C++ boekje liggen en het lukt ook al enigzins, echter werkt 1 ding niet en dat is componenten en variabelen wisselen tussen units. Op dit moment is dit men code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
__fastcall MijnThread::MijnThread(bool CreateSuspended)
  : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall MijnThread::PushTheButton(void)
{
  Button1->Click();
}
//---------------------------------------------------------------------------
void __fastcall MijnThread::Execute()
{
  Synchronize(PushTheButton);
  for(int i = 0; i < 2000; i++)
    {
    Edit1->Text = IntToStr(i);
    Sleep(100);
    Application->ProcessMessages();
    }
}

Verder staat in Unit1.cpp niks, ik heb elkaar header file included, maar hij ken Button1 en Edit1 niet die in de header van Unit1 staat, hoe kan ik dit verhelpen?
Heeft iemand toevallig een simpele applicatie waar hij threads gebruikt?


P.S. Admin, ik hoop dat je deze keer men niveau waardeert, ikheb net geleert hoe functies te maken dus men basiskennis is nu eenmaal laag, iedereen is ooit zo begonnen..

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 08:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je haalt wat dingen door de war. Verschillende cpp files hebben compleet niets te maken met verschillende threads. De concepten kun je gewoon door elkaar gebruiken.
men basiskennis is nu eenmaal laag
Dat zal best, maar tevens zeg je dat je dit moet implementeren. Dat riekt dus naar huiswerk. Daar is op zich niets mis mee, maar bij huiswerk hoort doorgaans ook lesstof waarin de theorie achter je opdracht behandelt wordt. Daarnaast kom je ook niet met een goede probleemomschrijving. Een zin als "maar hij ken Button1 en Edit1 niet die in de header van Unit1 staat" zegt me echt compleet niets. Beter taalgebruik zou overigens al iets helpen, maar nog handiger is als je gewoon de compile errors hier ook noemt.

[ Voor 4% gewijzigd door .oisyn op 25-04-2008 18:36 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
Oké, nou wat ik bedoel met verschillende cpp files bedoel is dat je voor je standaard unit een cpp file hebt en voor de thread unit een cpp file.
Ook heb je voor elke unit een header (2 dus, een voor de standaard unit en 1 voor de thread unit)
Ik snap ook dat een cpp file niks met een thread te make heeft, maar als ik een object thread toevoeg, dan voegt hij een cpp file en een header toe speciaal voor die thread.
Verder bedoel ik met dat hij button1 en edit1 niet kent de volgende message:
Unit2.cpp(30): E2451: Undefined symbol 'Button1'
Unit2.cpp(30): E2451: Undefined symbol 'Edit1'
Unit2 is de cpp file waar de thread instaat en in de header van Unit1 staan de componenten gedeclareert.
Zo duidelijker?

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


Verwijderd

"P.S. Admin, ik hoop dat je deze keer men niveau waardeert, ikheb net geleert hoe functies te maken dus men basiskennis is nu eenmaal laag, iedereen is ooit zo begonnen.."

12 grammatica/spelfauten in 2 zinnen, zou eerst is Nederlands leren voordat je met C++ begint.

Als je niks hebt toe te voegen aan een topic, post dan gewoon helemaal niks. Dat weet je ondertussen ook wel.

[ Voor 18% gewijzigd door Creepy op 25-04-2008 23:02 ]


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Verwijderd schreef op vrijdag 25 april 2008 @ 19:20:
"P.S. Admin, ik hoop dat je deze keer men niveau waardeert, ikheb net geleert hoe functies te maken dus men basiskennis is nu eenmaal laag, iedereen is ooit zo begonnen.."

12 grammatica/spelfauten in 2 zinnen, zou eerst is Nederlands leren voordat je met C++ begint.
Pas functies geleerd en nu al bezig met threads? Lijkt me een beetje vroeg, threads leert ge pas een heel stuk later, als ge OO en dergelijke tegoei door hebt. Begin daar eens mee. En een beetje respect, als gij het niveau van pas functies te schrijven, dan hebt ge toch nog een lange weg te gaan tot threads

Going for adventure, lots of sun and a convertible! | GMT-8


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 08:45

.oisyn

Moderator Devschuur®

Demotivational Speaker

bart0l0meus schreef op vrijdag 25 april 2008 @ 19:16:
Verder bedoel ik met dat hij button1 en edit1 niet kent de volgende message:
Unit2.cpp(30): E2451: Undefined symbol 'Button1'
Unit2.cpp(30): E2451: Undefined symbol 'Edit1'
Unit2 is de cpp file waar de thread instaat en in de header van Unit1 staan de componenten gedeclareert.
Zo duidelijker?
En in Unit2.cpp doe je een #include "Unit1.h", waar de declaraties van Button1 en Edit1 in staan? Overigens ben ik niet zo bekend met de VCL (de UI library van borland die je gebruikt), maar over het algemeen is het niet zo handig om GUI elementen aan te spreken vanuit verschillende threads.

[ Voor 16% gewijzigd door .oisyn op 25-04-2008 19:40 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
Verwijderd schreef op vrijdag 25 april 2008 @ 19:20:
"P.S. Admin, ik hoop dat je deze keer men niveau waardeert, ikheb net geleert hoe functies te maken dus men basiskennis is nu eenmaal laag, iedereen is ooit zo begonnen.."

12 grammatica/spelfauten in 2 zinnen, zou eerst is Nederlands leren voordat je met C++ begint.
let eerst eens op je eigen spelfouten! "spelfauten" (beetje trieste inbreng!)
Ik doe geen nederlands, en voor C++ lijkt me engels toch minstens zo belangrijk, verder is elektrotechniek men opleiding waar programmeren niet het enigste vak is, wel komt het vaak voor dat we voor project wel eens een programma moeten schrijven dat nog niet behandeld is.
Ik weet heus wel wat van programmeren, er zijn 2 manieren op de threads te maken, of ik vraag men leraar en maak het programma met wat hulp van hem, ma zo zit ik eenmaal niet in elkaar, en probeer ik het eerst graag zelf uit te vogelen.
heeft iemand niet een simpel programma waar 2 tellertjes onafhankelijk van elkaar lopen?

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:03
Jongens, dit heeft echt geen zin... (en bart0l0meus, ik geloof dat 'spelfauten' ironisch bedoeld was ... ).

Als je het zelf wilt uitvogelen hoe je met threads moet werken, dan kan ik je adviseren dat je eerst eens even een en ander daarover naleest, en probeert.
Echter, ik denk dat je eerst eens wat anders moet doen; en dat is de basiskennis proberen onder de knie te krijgen.
OM de vraag in je topicstart te beantwoorden: tuurlijk worden Button1 & Edit1 niet herkend; deze zullen hoogstwaarschijnlijk een member zijn van een class die afgeleid is van TForm.
Ik vermoed ook dat die MijnThread class een andere class is, en dus niet de class is waar je button & edit-control op staan.
Je kan dus niet zomaar in een andere class iets gaan aanspreken dat in een andere class gedefinieerd is.
Als je variablen die in een class gedefinieerd zijn, wilt gaan aanspreken in een andere class, dan zal je die variabelen moeten doorgeven naar een instance van die andere class, ofwel zal die instance van die andere class moeten zeggen aan je Form dat hij iets moet veranderen. (In jouw geval is dat 2de geval volgens mij de netste manier).
Hoe kan je dit nu doen: als de teller verhoogt wordt , kan je een event raisen. Je Form kan een eventhandler koppelen aan dat event, en in die eventhandler zorg je er dan voor dat je Edit control de juiste waarde toont (die zal hij dus moeten halen uit je teller-class).
Daarbij moet je er ook nog voor zorgen dat je Windows controls (in jouw geval je EditControl) ook enkel 'aangepast' wordt door de UI - thread, en dus niet door je eigen thread.

En code requests / script-requests (zoals het topic nu verzand) daar doen we hier helemaal niet aan mee. Scriptrequests zijn niet toegestaan.

Maar goed, 't lijkt me dat je eerst moet kunnen gaan, voordat je wil leren lopen. Begin bij het begin, bij de basis; desnoods begin je met simpele console-applicaties, en ga dan pas eens verder kijken.

https://fgheysels.github.io/


  • bart0l0meus
  • Registratie: Mei 2006
  • Laatst online: 04-11-2022
thnx whoami, hier kan ik mee verder, ik ga eens zoeken! Dit was het enigste waar ik om vroeg:S
Ik heb al heeeeeeeel wat programma geschreven, tot een programma dat een complete discovloer kan aansturen, wat echt geen simpel programma was, onderschat men kennis niet;)
Toch misschien een stomme vraag, die class van de thread, kun je dit niet ook schrijven in de header van de hoofd header?

“If Your Only Tool Is a Hammer Then Every Problem Looks Like a Nail” (Abraham Maslow)


Verwijderd

.oisyn schreef op vrijdag 25 april 2008 @ 19:39:
Overigens ben ik niet zo bekend met de VCL (de UI library van borland die je gebruikt), maar over het algemeen is het niet zo handig om GUI elementen aan te spreken vanuit verschillende threads.
Klopt, de VCL is niet threadsafe. Met Synchronize() is hier wel een beetje omheen te werken, maar het is veiliger om je threads messages naar de main thread te laten sturen, en de main thread dan de UI dingen te laten doen.
Pagina: 1