1) HB doesn't inject any binaries into WoW. (We have some ASM stuff shoved in there, thats it.)
2) Yes, HB is single-threaded as far as any 3rd party dev is concerned. (We do have more than 1 thread, but thats mostly for logging, GUI, logic, etc stuff. Nothing for anybody to be concerned with dealing with)
3) WoWMovement.Move (or ClickToMove, whichever variant) locks the WoW frame while executing the engine func. This also locks out HB from doing anything else that requires engine calls. (Anything Lua related, movement related, TraceLine, and the list goes on)
4) The ObjectManager only pulses as fast as the bot needs it to. This means; you're not doing the required checks to ensure things are valid, as HB is likely to be quite a few frames behind. (We do this on purpose. There's absolutely *zero* need to tick at 30fps, no matter what your excuse.)
5) Fix your code. If you *must* go with a threaded approach like this, stop using CTM. And just use the keyboard emulator we have in HB to move "forward" during those frames you're ticking. Thats entirely thread safe, and won't crash WoW. (Again, you really don't need to do that at all.)
If you want to implement something like this properly; create a plugin, override the Pulse() method, and call CTM from there. You can also increase TreeRoot.TicksPerSecond to force the bot to tick as fast as it possibly can. (Keep in mind; any time you do an injection-related task, outside of a FrameLock, it takes 1 fps to do it. [Thats roughly 30ms if the game is running at 30fps])
The faster the client is running, the faster HB is able to "tick". Its just that simple.