Ответ, конечно, тот, который дал Slebetman.Тем не менее, один из способов отладки такого рода вещей (особенно в более сложных случаях) заключается в добавлении префикса к сообщениям, напечатанным каждым потоком, по результату thread::id
, и к убедитесь, что Вы печатаете сообщение при начале каждого цикла.Например:
package require Thread
set ::a_thread [thread::create {thread::wait}]
proc start_a {} {
puts "[thread::id]: Dispatch to $::a_thread"
thread::send $::a_thread {
puts "[thread::id]: Running a thread"
}
after 1000 a_start
}
proc infinite_loop {} {
while {1} {
puts "[thread::id]: Loop"
after 500
}
}
start_a
infinite_loop
puts "[thread::id]: Start main event loop"
vwait forever
Это бы указывало на то, что отправка происходила один раз, что запуск в другом потоке происходит синхронно (thread::send
ожидает завершения выполнения сценария по умолчанию), ичто бесконечный цикл предотвращает запуск основного цикла событий (и, следовательно, повторное планирование диспетчеризации).Поскольку вы не знали, кто чем занимается, конечно же, была путаница!