Ik ben bezig om een multi threaded applicatie te maken. Ik heb 1 pc waarop ik een applicatie draai. Het gaat in dit geval om een bowling score systeem. Dus 1 applicatie zorgt voor 4 onafhankelijk van elkaar werkende score schermen.
Nu ben ik van plan om het als volgt te gaan maken.
Ik heb 1 form wat het main form is. Hierop plaats ik een TLaneComputer. Dit object creeert een aantal TBowlingLane instanties.
Die TBowlingLane objecten zijn gebaseerd op Threads. Deze TBowlingLane instanties kan je dus zien als aparte programma's die draaien op de monitoren boven de banen.
Echter bij de volgende test werkt het niet echt lekker:
Op mijn main form heb ik een knop waar ik een TBowlingLane instantie aanmaak.
WelcomeScreen is een formulier waarop een timer staat:
Als ik dit project uitvoer, dan loopt het steeds vast, of het welcomescreen wordt niet eens getoond, enz..
Er is niet echt een duidelijke indicatie wat het kan zijn.
Maar is er misschien iets dat ik helemaal verkeerd doe in het ontwerp?
Nu ben ik van plan om het als volgt te gaan maken.
Ik heb 1 form wat het main form is. Hierop plaats ik een TLaneComputer. Dit object creeert een aantal TBowlingLane instanties.
Die TBowlingLane objecten zijn gebaseerd op Threads. Deze TBowlingLane instanties kan je dus zien als aparte programma's die draaien op de monitoren boven de banen.
Echter bij de volgende test werkt het niet echt lekker:
Op mijn main form heb ik een knop waar ik een TBowlingLane instantie aanmaak.
Delphi:
1
| BowlingLane1 := TBowlingLane.Create(False); |
C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| unit BowlingLane; interface uses SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms, QDialogs, QStdCtrls, WelcomeScreen, SyncObjs; type TBowlingLane = class(TThread) private { Private declarations } WelcScreen: Tfrm_WelcomeScreen; protected { Protected declarations } procedure Execute; override; public { Public declarations } published { Published declarations } end; implementation { TBowlingLane } procedure TBowlingLane.Execute; begin WelcScreen := Tfrm_WelcomeScreen.Create(nil); WelcScreen.Show; repeat until Application.Terminated; end; end. |
WelcomeScreen is een formulier waarop een timer staat:
C:
1
2
3
4
5
6
7
8
9
| procedure Tfrm_WelcomeScreen.Timer1Timer(Sender: TObject); begin Timer1.Enabled := False; if lbl_Vuurknop.Visible then lbl_Vuurknop.Visible := False else lbl_Vuurknop.Visible := True; Timer1.Enabled := True; end; |
Als ik dit project uitvoer, dan loopt het steeds vast, of het welcomescreen wordt niet eens getoond, enz..
Er is niet echt een duidelijke indicatie wat het kan zijn.
Maar is er misschien iets dat ik helemaal verkeerd doe in het ontwerp?