С точки зрения используемых ресурсов ЦП оба решения одинаковы: поток, который приостановлен, и поток, ожидающий в WaitForSingleObject для объекта, который не был сигнализирован, не получают циклов ЦП вообще.
Тем не менее, WaitForSingleObject почти всегда является предпочтительным решением, потому что код, использующий его, будет намного более "естественным" - его легче читать и легче делать правильно. Приостановка / возобновление потоков может быть опасным, потому что вам нужно быть очень осторожным, чтобы убедиться, что вы знаете, что приостановите поток в состоянии, в котором приостановка не принесет вреда (представьте, что приостановка потока, который в настоящее время содержит мьютекс).