| << Vorheriges Thema anzeigen :: Nächstes Thema anzeigen >> |
| Autor |
Nachricht |
HackerNeo Forum-User

Anmeldungsdatum: 02.09.2008 Beiträge: 28 Wohnort: Oldenburg
|
Verfasst am: 09.03.2010, 10:38:33 Titel: prozedur durch andere prozedur beenden |
|
|
Hallöchen,
ich habe eine Oberfläche mit einem Start dun Stop-Button und möchte mit dem Start-Button eine Prozedur aufrufen, die dann einiges an Dateien kopiert. Hier zu meiner Frage. Wie kann ich dir Prozedur direkt unterbrechen durch das betätigen des Stop-Buttons?
Anmerkung: Ich möchte nicht, dass in der Prozedur für das Kopieren jedes Mal eine Variable für den Stop-Button abgefragt wird. Es soll lediglich von außerhalb auf diese Prozedur zugegriffen werden und diese beispielsweise durch ein Return direkt beendet werden.
Vielleicht hat ja jemand von Euch eine Ahnung wie? Vielleicht mit nem Thread oder über Trace?
lg und Danke im Voraus |
|
| Nach oben |
|
 |
manfred Administrator

Anmeldungsdatum: 03.03.2003 Beiträge: 990
|
Verfasst am: 09.03.2010, 13:31:14 Titel: |
|
|
##
set ::x 0
set ::command ""
proc schleife {} {
incr ::x
eval $::command
after 500 {schleife}
}
pack [label .lab -textvariable ::x]
pack [button .bu -command {set ::command return} -text beenden]
schleife
##
Gruß
Manfred |
|
| Nach oben |
|
 |
hank Top-User


Anmeldungsdatum: 10.03.2006 Beiträge: 876 Wohnort: Leipzig
|
Verfasst am: 10.03.2010, 13:14:39 Titel: |
|
|
Hallo,
eine Schleife der Form
| Code: | proc copy {} {
foreach file [glob *] {
file copy $file c:/backup
}
}
| kann nicht durchbrochen werden (es sein denn, es kommt bei der Ausführung von file copy zu einem Fehler).
In so einer Schleife werden faktisch keine Events (auch keine Button-Drücken) abgearbeitet. Zumindest muss die Schleife so umformuliert werden, dass Events verarbeitet werden können (Realisierung über after).
Völlig ohne Änderung in einer "eventblockierenden" Schleife kommt man nur aus, wenn man einen separaten Prozess (oder Thread) laufen lässt.
Viele Grüße
Göran |
|
| Nach oben |
|
 |
|