On 8 August 2011 22:17, Sean P. DeNigris <sean@clipperadams.com> wrote:
Igor Stasenko wrote:
the problem is that you cannot interrupt it, by pressing Alt-. (or Cmd-. on macs)?
Right, smart ass ;-)
Well, it works for me, if i press it multiple times :) InputEventFetcher default eventHandlers an OrderedCollection(an InputEventSensor an UserInterruptHandler) So, all logic whether interrupt the process or not, is in #handleUserInterrupt i think we should change it: toInterrupt := Processor preemptedProcess. "Only interrupt processes which are potentially blocking the UI" toInterrupt priority < UIManager default uiProcess priority ifTrue: [toInterrupt := Project uiProcess]. "Fork at lower priority to avoid interrupting system-critical processes" toInterrupt debugWithTitle: 'User Interrupt'] forkAt: Processor activeProcess priority -1 the #preemptedProcess is not works, because it actually tries to guess, which process was preempted, instead of knowing it exactly. What i think we should do is to extend the UserInterruptHandler to a) have a registry of system-critical processes , which should never be interrupted: this is Delay, Event fetcher, interrupt handler, weak finalizer, idle process All those facilities should register themselves in UserInterruptHandler whenever they deciding to start or restart their process. b) interrupt the first process, not found in (a), going from higher priority to lower. Then if you press the cmd-. multiple times, you will be able to interrupt anything which is not system-critical. Because there is no reliable way to detect a processor hog process, unless you running CPU watcher and gather statistics on CPU consumption rates. Stopping a process which was running just before current one is like shooting in the clear sky in hope that duck will teleport right on the path of your bullet :) -- Best regards, Igor Stasenko AKA sig.