!7 sclass Entry { WeakReference thread; long threadID; S threadName, stackTrace; } cmodule2 RunnableThreads > DynObjectTable { start { dontPersist(); //itemToMap = func(Thread t) -> Map { litorderedmap("Name" := t.getName()) }; dm_doEveryAndNow(2.0, r actualUpdate); } void actualUpdate enter { setData(map(runnableThreadsWithStackTraces(), (t, st) -> nu Entry( thread := weakRef(t), threadID := threadID(t), threadName := t.getName(), stackTrace := stackTraceToString(st)))); } afterVisualize { popupMenuItem_top("Cancel thread", voidfunc(Entry e) { cancelForeignThread(e.thread!); }); } }