Как найти общее время, используемое потоком в C / C ++?

Я пытаюсь получить общее время, потраченное определенной темой на данный момент программно.

getrusage возвращает процессорное время потока, но я хочу Всего время, включая время, потраченное потоком по какой-либо причине.

Обратите внимание, что я буду использовать эту функциональность, оснащая данную программу профилировщиком, который я написал.

В программе может быть много потоков (я сосредоточен на профилировании серверов, поэтому их может быть много). В любой момент времени я хотел бы знать, сколько времени потратил определенный поток (пока). Так что не удобно запускать таймер для каждого потока, так как он порождается. Так что я хотел бы что-то похожее на использование getrusage например он возвращает общее время текущего потока или, может быть, я могу передать ему идентификатор потока. Таким образом, ручные механизмы, такие как получение метки времени, когда поток был порожден, а одна позже, после определения их разницы, не будут для меня очень полезными.

Кто-нибудь может подсказать, как это сделать?

Спасибо!

2

Решение

Сохраните текущее время в момент запуска потока. Общее время, потраченное потоком, считая как рабочее, так и заблокированное время, равно:

current_time - start_time

Конечно, это почти всегда бесполезно / бессмысленно, поэтому для него нет специального API.

0

Другие решения

В зависимости от того, для чего вы хотите это использовать, есть одна возможность подумать о суммировании количества тактов, использованных во время блокировки, которые обычно достаточно медленны, чтобы скрыть небольшие накладные расходы, как это. Таким образом, из этой суммы и интервала окружающего потока, который вы также измеряете, вы можете вычислить нагрузку на поток в реальном времени за этот интервал. Конечно, временное разделение с другими процессами может привести к некоторому снижению, и захват всех блокировок может быть очень простым или очень сложным, в зависимости от вашей ситуации.

0

По вопросам рекламы [email protected]