Forum: Algorithmen, Datenstrukturen und Klassendesign
by jfheins,
29. Mär 2011
Ja, genau. Ein Thread kann immer nur an einer Stelle im Code zugleich arbeiten. Dafür gibt es ja die MessageQueue, die die Nachrichten puffert und dafür sorgt das alles schön nacheinander abgearbeitet wird. Diesen Fluss kann man mit Application.ProcessMessages unterbrechen, aber dann kann man sich böse Konsequenzen einhandeln ;)
Forum: Algorithmen, Datenstrukturen und Klassendesign
by jfheins,
29. Mär 2011
Nun mal nicht so vorschnell ... die schöne Asche :mrgreen:
Es ist ja noch nicht geklärt ob es diesen "Designfehler" überhaut gibt. Ichhabe ja gesagt: "es wäre ein fetter Designfehler".
Ich habe mir gerade das Tutorial mal angeguckt. Da steht nichts von Thread bis auf das Ende, da steht, dass alles über den Hauptthread abgewickelt wird. Wenn sich dein Programm an dem Tutorial orientiert, dann...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by jfheins,
28. Mär 2011
Mooooment!
Dass sich die Liste ändern kann während der Algorithmus läuft war so nicht erwähnt. Und es wäre ein fetter Designfehler. Kann aber auch nur passieren wenn du einen extra Thread hast, der die Liste ändert. Und wenn du so einen Thread hast, leiden beide Algorithmen unter dem gleichen "Problem" dass sie sich nicht auf die Liste verlassen können.
Die beste Lösung wäre wohl, wenn der...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by jfheins,
28. Mär 2011
Sollte nicht allzu schlimm sein. Immerhin ist die Komplexität nur noch linear. (Also O(n) - wenn dir das was sagt) Und die paar tausend Durchläufe schafft die CPU schon in ausreichend kurzer Zeit ;)
Und weniger komplex als linear geht's (in diesem Fall) nicht ;)
Vermutlich ist es einen Hauch langsamer. (Insbesondere wenn Items einen Getter hat)
Aber es war ja klar was gemeint war.
Gute...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by jfheins,
28. Mär 2011
Ja.
Da die Liste sortiert ist, brauchst du an dieser Stelle: For J:=0 To Pred(Clients.Count) Do
SendTo:=(SendTo Or (Clients.Items = Current));
Nicht alle durchgehen, sondern nur ab dem aktuellen einmal hoch und einmal runter solange der Text gleich bleibt.
// Der eigentlich Suchlauf
For I:=0 To Pred(Clients.Count) Do
If Clients.Selected Then
Begin