You are entirely correct. Windoze will use one core, and trainz the other.
Sorry to revive an old thread, but this is not the case, the CPU scheduler will schedule an OS thread (a thread created using the Windows API) to run on any CPU that it has an affinity for, so you could have Trainz processes and Windows processes sharing the same CPU.
You can modify this in task manager (Processes, Right click on the process, Set Affinity - then tick the boxes for the CPU's you want), but to get the behaviour you want you would have to modify all the Windows processes to have an affinity for only one processor and then Trainz to have affinity only for the other.
IF Trainz is multi-threaded, and is using the OS to handle threads, then as soon as Trainz creates a new thread where it runs is entirely up to the scheduler within the OS.
Its possible however Trainz uses soft threads, where the application runs as one single thread on the OS, and handles its own threading/scheduling - in that case we would see no multi-core benefit - the app appears to the OS as a single thread and any scheduling done by the OS would apply the entire application.
There might be some benefit to trying Trainz to a single dedicated processor - when a thread reaches the end of its time slice the CPU performs a context switch, this is where the CPU saves the state of the finished thread, requeues it, and then loads the state of the next scheduled thread for processing. I'm not entirely sure but I believe if the next scheduled thread is same as the current thread then the OS does not perform a context switch, thus saving a small cost in CPU time.
Being honest, the performance of the scheduler and memory manager under Windows is fine. These tweaks really have no discernable effect.
Edit: for the purposes of this post Core=CPU. 2 Cores = 2 CPU's.