Есть ли быстрые способы перехвата в своей программе усыпания/пробуждения потоков? Кроме того как перехватывать WaitForSingleObject,ResumeThread и тп... При этом приложение много поточное...и этот перехват не должен влиять на роботу программы, перехват нужен токо для ведения статистики.
А зачем тебе что то перехватывать ? Пусть каждый поток сам распечатывает кто он и в какой момент времени он пытается что то сделать и если все потоки будут проходить один и тот же код разницы во времени возникать не должно.
можна конечно и так сделать...но хотелось бы сделать библиотечку которую подключаешь к проекту а та тебе статистику...полезно для отладки...
Ну так сделай Пусть она например во время своей инициализации (или через экспортируемую функцию) подменяет адрес нужной тебе апи в таблице экспорта, делает буфер в памяти, а процедура фильтр скидывает туда пару тройку значений (например инфу о потоке на прямую из TIB) а адрес для записи я бы доставал так : eax = размер структуры lock xadd [общая переменная],eax eax = указатель на структуру а потом выводил эти значения другим потоком внутри dll скажем в консоль, или скидывал в файл во время выхода из dll. По моему сердито и быстро до некуда Реализация того что тебе нужно зависит только от фантазии и потребностей. Короче легких путей не будет, а если они и есть то тяжелый путь полезней и интересней PS:если напишешь выложи исходничек вдруг кому пригодится
в вопщем я так и думал) просто думал что есть способ получше, так как у потока токо два основных состояния рабочий/спящий ... тоесть можна былоб предположыть что есть какието общие функ. которые просыпают/усыпают поток
Просыпают Будят Усыпают также двусмысленно, как и засыпают. Усыпляют хоть и не кошерно, но грамотнее.