Взял простейший Hello World в МессагБоксе, запускаю, смтрю он занимает 1.5 метра в таскменеджере, куда ему столько то ? И еще вопросик, Допустим мое приложение не активно, но ему срочно нужно внимание пользователя, в винде такие начинают мигать иконкой в таскбаре, а как это делаеться програмно ?
Память выделяется не только под саму программу. В частности, на её адресное пространство отображаются различные библиотеки подсистемы Win32 (kernel32.dll и тому подобные).
function FlashWindow(Wnd: HWnd; Invert: Bool): Bool; Wnd: Окно, которое делается мигающим Invert: Не нуль, если мигание, 0 - для возврата к исходному состоянию (для пиктограмм игнорируется). Возвращаемое значение: не нуль, если окно до вызова было активным; 0 - в противном случае. функция находится в user32.dll
Пасиб помогло, а вот чем можно проверить все ли я я там позакрывал за собой (по выходу из программы), все ли хендлы освободил ?
ну я так и думал что по hinst винда все вычищает. А если я под DirectX что нить пишу, там была debug версия она сообщала что не все закрыто, это не страшно ?
по какому hinst, простите? +) Винда сама уничтожает адресное пространство и таблиццу хендлов при завершении процесса
Да, еще забыл сказать - не беспокойся насчет 1.5 метров, это виртуальная память. Физической оно занимает значительно меньше в связи с тем, что физические страницы системных длл разделяются между процессами и они используют одну копию. Правда, до тех пор, пока ты не захочешь ее модифицировать. Тогда тебе дадут частную копию страницы
а по тому что GetModuleHandle выдает, я не совсем ассемблерщик, меня прет от С-- там у нас есть hThisInst его везде пихать надо, хотя и NULL проканывает. Я ранее Delphiнистом был, а счас хочу быстро и малопрожорливо, хотя изначально пишу алгоритм на дельфях, а потом мучаюсь с переводом
hInstance нужно было в версиях Windows 9x и более не используется. Можно передавать везде NULL. Правда ты путаешь hInstance и hModule. hModule используется для идентификации образа и представляет собой базовый адрес его загрузки. GetModuleHandle(0) возвращает как раз hModule. Используется, например, в том же LoadResource.
вот кусочек startup.h-- #ifdef __clearpost @CLEARPOSTAREA(0); hThisInst=GetModuleHandleA(EAX); #else hThisInst=GetModuleHandleA(0); #endif //__clearpost #ifdef __CONSOLE__ hStdOut=GetStdHandle(-11); #endif
Shooshpanchik MSoft Убиться-то убьются, но лучше привыкать всё освобождать своими ручками. Такая привычка изрядно помогает в борьбе с утечками памяти
Никогда не понимал, почему после CreateWindow/DestroyWindow остаются открытыми несколько user-хендлов и около 8-10 gdi-хендлов. Может знает кто откуда или что с этим сделать?
Лучше тогда уже Process Explorer от Руссиновича - в нем столько всякого бесполезного посмотреть можно