раз уж тут меня упомянули, то дам совет по поводу детекта заморозки процесса/потока, допустим, что есть точка кода А и точка кода Б, это как кольцевая трасса (выполняется в цикле), ты знаешь, что при любом расскладе круг она сделает скажем, не больше чем за 2-3 секунды ( как пример простой реквест на сервер ), отсчитывать время можно по разным функциям, просто условный GetTickCount хукается сциллой, я вот юзал std::time для отмера времени. Можно использовать структуры и т.д., но лучше будет если ты самостоятельно напишешь функу для отмера времени и унесёшь её под виртуализацию