Операционная система Microsoft Windows 3.1 для программиста -том 3


Листинг 2.3. Файл gmem/gmem.cpp - часть 2


// Заказываем удаляемый блок памяти размером 200000 байт hmemGlDiscard = GlobalAlloc(GMEM_MOVEABLE | GMEM_DISCARDABLE, 200000l);

if(hmemGlDiscard != NULL) { // Если мы его получили, удаляем блок GlobalDiscard(hmemGlDiscard);

// Пытаемся зафиксировать блок памяти lpvoidGlDiscard = GlobalLock(hmemGlDiscard);

if(lpvoidGlDiscard != (LPVOID) NULL) { // Если удалось (чего не должно быть, так как // мы только что удалили блок), выводим // идентификатор блока и логический адрес wsprintf(szBuf, "hmemGlDiscard=\t%04.4X\n" "lpvoidGlDiscard=\t%04.4X:%04.4X", hmemGlDiscard, FP_SEG(lpvoidGlDiscard), FP_OFF(lpvoidGlDiscard)); MessageBox(NULL, (LPSTR)szBuf, "Global Block", MB_OK);

// Разрешаем перемещение блока GlobalUnlock(hmemGlDiscard); } else { // Если блок памяти не удалось зафиксировать, // проверяем, не был ли он удален if(GlobalFlags(hmemGlDiscard) & GMEM_DISCARDED) { MessageBox(NULL, "Блок удален и мы его восстанавливаем", "Global Block", MB_OK);

// Восстанавливаем удаленный блок памяти hmemGlDiscard = GlobalReAlloc(hmemGlDiscard, 200000l, GMEM_MOVEABLE | GMEM_DISCARDABLE);

// Фиксируем блок памяти lpvoidGlDiscard = GlobalLock(hmemGlDiscard);

if(lpvoidGlDiscard != (LPVOID) NULL) { // Выводим идентификатор и логический адрес // зафиксированного блока памяти wsprintf(szBuf, "hmemGlDiscard=\t%04.4X\n" "lpvoidGlDiscard=\t%04.4X:%04.4X", hmemGlDiscard, FP_SEG(lpvoidGlDiscard), FP_OFF(lpvoidGlDiscard)); MessageBox(NULL, (LPSTR)szBuf, "Global Block", MB_OK);

// Освобождаем блок памяти GlobalUnlock(hmemGlDiscard); } else { MessageBox(NULL, "Ошибка при фиксировании блока", "Global Block", MB_OK); } } }

// Отдаем удаляемый блок памяти операционной системе GlobalFree(hmemGlDiscard); } else { MessageBox(NULL, "Мало памяти для удаляемого блока", "Global Block", MB_OK); }

return 0; }

Перед началом работы приложение определяет объем свободной памяти, вызывая функцию GlobalCompact со значением параметра, равным -1.


Начало  Назад  Вперед



Книжный магазин