For the Threading API itself, there isn't a different. For locking/synchronisation however:
Mutex vs. Critical Section.
Mutexes use Kernel level synchronisation whereas Critical Sections are done in Usermode.
Mutexes can be used across processes whereas Critical Sections cannot.
Critical Sections are faster than Mutexes provided that there is no thread contention. Otherwise a critical section will allocate a semaphore or mutex object automatically and will have the same performance of a mutex.
Mutexes are objects that are owned by a thread and as such, it blocks until that object itself is released. A mutex in other words is not a requirement but a warning..
For a thread can optionally ignore the mutex and access the resource anyway. The same can be done for a CriticalSection if you try. With a mutex, it's easier to ignore. That being said, if you ignore a mutex or critical section, you might as well have not coded them in, in the first place.
The TLapeThread supports termination and suspension whereas what I wrote has it "optional" provided you decide to use WinAPI to achieve it (which the TLapeThread does).
I'm not sure that it is a good idea to export those simply for the fact that if you forcefully terminate a thread or suspend it in a bad/unexpected state, it will leak resources (upon termination) and deadlock (upon suspension). For suspension & termination, you should be using an atomic variable or a a regular variable with synchronisation aka "Condition Variable":
http://en.wikipedia.org/wiki/Monitor_(synchronization) or
http://msdn.microsoft.com/en-ca/libr...(v=vs.85).aspx.
TLDR:
Other than locking mechanisms, the functions are the same. With the exception of thread forceful termination & suspension, I'd use this for threading as it's just a threading only API.