Multithreading in Delphi is very easy, just inherit the TThread class, and override the Execute method. Making the code is just like making any other code. Use Resume to start the execution. The problems start when you exchange information with other objects, and it gets worst when they are in different threads.

Many books I have read say something like "oh, by the way, you can use multithreading and make your games even better!". Then why are they keeping with the old fashioned game loop?? Just because it's optimal. The same happens with event driven phylosophies.

My own conclusion is that multithreading is not something that you just add and everything gets enhanced. It's just a solution for certain problems that can't be addressed in another way. For example, to deal with blocking sockets or reading from slow storage devices.