История shpion.exe (ex-profiler.exe) (см. http://perpholenta.narod.ru/texts.html) Это достаточно специфическая утилита. Она дает доступ к десяти счетчикам, позволяя замерять время в каждом из них. При грамотном использовании это дает возможность осуществлять так называемый "мониторинг реального времени конструируемых приложений". Или "realtime profiling", это уж кому как ближе. В общем, рассказывать тут особо нечего. Profiler.exe писался для профайлинга одного конкретного большого проекта. Стандартные средства работали медленно, давали массу ненужной информации, а вот узнать, собственно, что же так тормозит всю систему так и не выходило. Теперь стало немного проще. // это для удобства static const HWND dHWND = (HWND)3146324; // это для профайлинга SendMessage(pHWND,WM_USER,N,0); // обнулить N-й счетчик; SendMessage(pHWND,WM_USER,N,1); // начать замер времени; SendMessage(pHWND,WM_USER,N,2); // отметить время и сложить со счетчиком; SendMessage(pHWND,WM_USER,N,3); // инкрементровать счетчик; // это для отладки SendMessage(pHWND,WM_USER,10+N,I); // передать целочисленное I в N-й счетчик; SendMessage(pHWND,WM_USER,'B',0); // это для кнопки, подробности - ниже. Кнопки: [O] - обнулить счетчики; [N] - вывести значения счетчиков; [%] - рассчитать процентное отношение относительно нулевого счетчика. Если нулевой счетчик пуст, он заполняется суммой остальных счетчиков; [W] - получить значение обработчика окна в буффер обмена; [C] - получить строчку отсылки сообщения в шпион для Си; [F] - записать результаты в файл. [] Realtime print - включить/выключить отображение результатов в реальном времени. С выключенным выводом результаты точнее. Общая схема работы приблизительно такова: 1. Запускается shpion.exe, в буффере обмена появляется его HWND. 2. HWND прописывается как константа. 3. По тексту проверяемой программы расставляются границы замеров времени, или инкременты счетчиков. 4. В правом поле profiler коментируется: что приходит в каждый счетчик. 5. Проверяемая программа запускается в разных режимах, замеры счетчиков анализируются на ходу, или записываются в файлы. Дополнение от 29.01.2007 Я переименовал profiler.exe в shpion.exe, так как теперь его функциональность расширена и он стал не только профайлером. Вот, например, с его помощью можно остановить выполнение программы в отладочном режиме. У него есть кнопка "button". У кнопки есть свой счетчик, который увеличивается каждый раз, когда кто-то нажимает эту кнопку. А такая строчка: a=SendMessage(pHWND,WM_USER,'B',0); позволяет получить количество этих нажатий. То есть, при отладке можно сделать остановку по требованию. Поставить брейкпоинт на проверке "а" - и дело с концом. Дополнение от 29.01.2008 Во-первых, профайлер все же не реального времени, а стохастический, то есть измеряет он скорее вероятность смены планировщиком задачи во время работы того или иного участка. Чем меньше эта вероятность - тем меньше времени занимает сам участок. Во-вторых, добавилось несколько новых функций: 1. SendMessage(pHWND,WM_USER,'Q',0); - выставляет длинну кванта времени для планировщика. 2. SendMessage(pHWND,WM_USER,'S',0); - выводит стандартный месседжбокс, просто чтобы остановить исполнение программы в нужный момент и дать возможность рассмотреть счетчики. 3.1 SetWindowText(pHWND,"Какая-то строка"); - ставит какую-то строку в заголовок окна. 3.2 SendMessage((HWND)5703126,WM_USER,'T',0); - кладет строку из заголовка окна в текстовый блок справа. Можно осуществлять некое протоколирование И на всякий случай напоминалка ASCII: 'B' - 66 'Q' - 81 'S' - 83 'T' - 84