Autor Beitrag
komodor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 19.11.04 22:14 
hallo delphi freunde,

ich habe ein großes problem! ich soll für die schule eine simulation programmieren, in der per zufall neue kunden generiert werden und die dann zu einem schalter gehen sollen. nun habe ich mir 2 timer eingerichtet, einer der für die kunden erstellung und einen der für die kunden bewegung zuständig ist. beide timer sind anfangs synchron, auf 100ms gestellt. trotzdem kommt es vor, dass einige objekte, die ich später erstellt habe, also zum beispiel label von kunde5 das label von kunde4 überholt obwohl kunde 5 nach dem Code da unten ja erst später abgearbeitet wird, da er später in der liste drin ist.

ausblenden Quelltext
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:
procedure TForm1.Timer2Timer(Sender: TObject);
 var index:Integer;
 begin
  al_reset(in_post);
  For index:=0 TO besucher1
   DO BEGIN
        al_show(in_post,inhalt);
        IF inhalt.label_name<>''
         THEN BEGIN
               variable2:=FindComponent(inhalt.label_name);
               IF (TLabel(variable2).Left=300) AND (TLabel(variable2).Top=104)
                THEN BEGIN
                       y:=y+10;
                       al_delete(in_post);
                       al_append(schalter[0].liste,inhalt);
                     END;
               IF (TLabel(variable2).Left=300) AND (TLabel(variable2).Top>104+y)
                THEN TLabel(variable2).Top:=TLabel(variable2).Top-20;
               IF (TLabel(variable2).Top=344) AND (TLabel(variable2).Left<300)
                THEN TLabel(variable2).Left:=TLabel(variable2).Left+20;
               IF (TLabel(variable2).Left=100) AND (TLabel(variable2).Top>360)
                THEN TLabel(variable2).Top:=TLabel(variable2).Top-20;
               TLabel(variable2).Caption:=variable2.name;
              END;
        al_next(in_post);
      END;
  end;
end.


al_*** meine prozeduren, die sich mit Linearen listen beschäftigen
in_post kundenliste der kunden in der post
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
inhalt ist vom al_inhalttyp
al_inhalttyp = Record
                      label_name:String;
                      destination:String;
                      wuensche:Array[0..2] OF wunschtyp;
                    end;

y ist dazu da, dass ein abstand in der warteschlange entsteht, was aber auch nicht so ganz klappt!

für eure hilfe währe ich sehr seeeeeeeeeeeeeeeeeeeeeeeeeeeeehr dankbar!
komodor
komodor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 20.11.04 00:14 
weiß keiner was? :( dann muss ich mein programm wohl neu schreiben :roll: bitte helft mir! ich gucke morgen früh noch einmal rein!

thx komodor
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Sa 20.11.04 11:56 
Der Idee dahinter ist fehlerhaft. Du kannst nicht davon ausgehen, dass zwei Timer unter Belastung synchron laufen. Das Belastungsproblem ensteht dadurch, dass du während der Abarbeitung der Bewegung dem Prozess nicht ermöglichst, parallelen Aufgaben nachzukommen. Abhilfe schafft einerseits "Signatur 3."! Andererseits musst du dein Konzept auch auf einen Timer umstellen.

Gruß,
Jörg

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
komodor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 20.11.04 14:34 
.Chef hat folgendes geschrieben:
Abhilfe schafft einerseits "Signatur 3."! Andererseits musst du dein Konzept auch auf einen Timer umstellen.


hmmm.... was meinst du mit "Signatur 3."? was kann denn "3. Application.ProcessMessages bzw. TThread" bzw was macht es?
komodor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 20.11.04 17:52 
hat sich erledigt, ich habe die prozedur für die bewegung noch einmal neu geschrieben und jetzt laufen die beiden timer ohne probleme parallel und alles läuft gut!

thx für deine hilfe .Chef

cu all
komodor