"A thread can only be run on one core at one time. For an application to run on more than one core simultaneously, it must be multi threaded."
"Killermike has suggested giving each application its own OS context, and I have pointed out that this is a technique used in Unix systems (back in the mainframe era). It would require some rewriting of the OS and extension modules, but would it really need to be so extensive?"
Hugely extensive. I tried to make a list of contexts in RISC OS that would need to be replicated, but gave up when I reached 20.
Untrue; it may be multiprocess, or the compiler may do magic to make safe parts execute on different hyperthreads or cores.
"Rjek has rightly pointed out that a switch statement with a long list of case statements is less efficient than a jump table for handling the Wimp_Poll reason codes, but I have already agreed that any saving would be insignificant in itself."
No, myself and imj both said that a switch statement gets /compiled/ to a jump table anyway. (In ARM code, a jump table is a single instruction followed by a list of branch instructions).
"The Wimp_Poll idea was to allow applications to respond to more than one event at a time, in a multiprocessor system"
Other systems simply have a job dispatch thread; it would listen to Wimp_Poll, and dispatch jobs to handler threads. This is both simple, and good enough.