В документации
SuspendThread написано, что его лучше использовать только отладчикам, а не в реальной жизни.
Calling SuspendThread on a thread that owns a synchronization object, such as a mutex or critical section, can lead to a deadlock if the calling thread tries to obtain a synchronization object owned by a suspended thread.
Кроме того, SuspendThread/ResumeThread инкрементируют/декрементируют счётчик, в зависимости от того поток работает или нет. Проверяйте что возвращают функции, т.к. если, например, ResumeThread провалится, в итоге вы получите рассинхронизацию счётчика и уже никогда не сможете его разбудить.
Возможно цикл в одной из задач завершился и тогда методы тоже делают что-нибудь несуразное.