Hallo zusammen,
ich knabbere an einem Problem, an dem ich verrückt werde. Ich habe für unsere Schule ein Programm in Delphi 7 zur Vergabe von Facharbeiten in der Jgst. 12 geschrieben. Die Schüler können für die Facharbeit vier Fächer wählen und nach einem entsprechenden Algorithmus und vorgegebenen Bedingungen (nicht mehr als vier Arbeiten pro Kurs, nicht mehr als sechs Arbeiten pro Lehrer, falls ein Lehrer mehrere Kurse hat) werden von dem Programm die Facharbeiten zugelost. Dabei wird für jeden Los-Durchgang in Abhängigkeit der Verteilung der erfüllten Erst- bis Viertwünsche ein Score-Wert gebildet; sobald ein Score-Wert besser ist als der bisher beste, wird die aktuelle Zulosung gespeichert.
Die Zulosung soll bei uns öffentlich geschehen, weshalb es eigentlich so gedacht war, dass das Programm einen Button "Abbruch" hat, der den Algorithmus unterbrechen soll und die bis dahin beste Verteilung ausgibt, sodass eine Schuelerin oder ein Schueler nach x Minuten einfach "Stop" sagen kann. Gedacht hatte ich mir das so, dass durch Betätigen des Abbruch-Buttons eine globale Boolean-Variable auf "True" gesetzt wird, die vorher auf "False" initialisiert war. Die verschiedenen Durchgänge für das Losverfahren habe ich dann in einer REPEAT-UNTIL-Schleife untergebracht, deren Abbruchbedingung eigentlich sein sollte, dass die Abbruch-Variable auf "True" steht. Nun aber das Problem: Starte ich mit einem Start-Button den Ablauf des Programms, kann ich während des Ablaufs des Algorithmus gar nicht auf den Abbruch-Button klicken, sodass es auch gar nicht zum Abbruch des Algorithmus kommt. Da das Problem ja als Optimierungsvorgang ein nicht-endliches Problem ist, läuft ja eigentlich auch der Algorithmus unendlich.
Dementsprechend meine Frage: Wie kann ich Delphi dazu bekommen, dass es auch während der Abarbeitung der Befehle der Start-Button-Click-Prozedur das Betätigen eines anderen Buttons (Abbruch-Button bzw. Abarbeitung deren Click-Prozedur) zulässt. Ich hatte eigentlich gedacht, dass das unter den Begriff der Nebenläufigkeit fällt, aber über diesen Suchbegriff bin ich nicht wirklich fündig geworden. Gibt es da in Delphi keine Möglichkeit, sowas zu realisieren?
Danke im Voraus
Eric.