Грязные окна
Модератор: Дед Пахом
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
- Игорь Столяров
- Ветеран движения
- Сообщения: 7374
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Грязные окна
Привет всем !
А не обращал ли кто внимание на такой интересный эффект:
Есть AppFrame - меню, в нем по таймеру (или вручную - все равно),
абсолютно штатными средствами открывается и закрывается
MDI (или SDI) окно как поток: Start(MyWindow). Так вот - если посмотреть в диспечере задач - то такое "приложение" будет медленно, но уверенно "подъедать" память с каждым циклом открытия/закрытия окна.
Если окошко открывается / закрывается по таймеру, например раз в 30 сек. - то за сутки будет съедено несколько Mbyte.
Это у меня какие-то проблемы с чисткой памяти или вообще так и должно быть ? И можно ли как-нибудь это безобразие прекратить ?
Среда WinXP SP2 & C63 9053. Заранее спасибо за совет ...
А не обращал ли кто внимание на такой интересный эффект:
Есть AppFrame - меню, в нем по таймеру (или вручную - все равно),
абсолютно штатными средствами открывается и закрывается
MDI (или SDI) окно как поток: Start(MyWindow). Так вот - если посмотреть в диспечере задач - то такое "приложение" будет медленно, но уверенно "подъедать" память с каждым циклом открытия/закрытия окна.
Если окошко открывается / закрывается по таймеру, например раз в 30 сек. - то за сутки будет съедено несколько Mbyte.
Это у меня какие-то проблемы с чисткой памяти или вообще так и должно быть ? И можно ли как-нибудь это безобразие прекратить ?
Среда WinXP SP2 & C63 9053. Заранее спасибо за совет ...
Re: Грязные окна
состряпал пример, и не увидел того, что память постоянно отжирается, вероятно, если это ABC, проблема в ABC классахИгорь Столяров писал(а): Это у меня какие-то проблемы с чисткой памяти или вообще так и должно быть ? И можно ли как-нибудь это безобразие прекратить ?
Среда WinXP SP2 & C63 9053. Заранее спасибо за совет ...
Код: Выделить всё
program
map
main
wProc
end
ThreadWPRoc LONG
code
main
main procedure
AppFrame APPLICATION('Application'),AT(,,493,293),FONT('MS Sans Serif',8,,FONT:regular),CENTER,IMM,ICON(icon:exclamation), |
SYSTEM,MAX,RESIZE,TIMER(30)
END
CODE
OPEN(AppFrame)
ACCEPT
CASE EVENT()
OF EVENT:Timer
IF NOT ThreadwPRoc
START(wProc,25000)
END
END
END
wProc PROCEDURE
Window WINDOW('Caption'),AT(,,287,162),FONT('MS Sans Serif',8,,FONT:regular),CENTER,IMM,TIMER(30),SYSTEM, |
GRAY,MDI
END
code
ThreadWPRoc = THREAD()
open(window)
ACCEPT
CASE EVENT()
OF EVENT:Timer
BREAK
END
END
close(window)
ThreadWPRoc = 0
- Игорь Столяров
- Ветеран движения
- Сообщения: 7374
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Да действительно - я это заметил на программе с ABC. Причем, есть еще одна интересность - если окно в потоке не открывать, то нарастание памяти не происходит. При этом классы ABC используются - для доступа к файлам и т.д.
Тогда вопрос можно поставить по другому: есть ли средства и возможность вернуть память выделенную потоку с ABC, после его закрытия ?
Тогда вопрос можно поставить по другому: есть ли средства и возможность вернуть память выделенную потоку с ABC, после его закрытия ?
надо шерстить ABC классы, где то, что то не подчищают за собой, особенно работу ANY полей в GROUP и QUEUE, если таковые имеютсяИгорь Столяров писал(а):Да действительно - я это заметил на программе с ABC. Причем, есть еще одна интересность - если окно в потоке не открывать, то нарастание памяти не происходит. При этом классы ABC используются - для доступа к файлам и т.д.
Тогда вопрос можно поставить по другому: есть ли средства и возможность вернуть память выделенную потоку с ABC, после его закрытия ?
просто снаружи что то сделать, например побегать с бубном, не получится
ЗЫ
хорошо, что я так и не преполз на ABC.
Вооще то и от Legay юзается только Window и Source процедуры, остальное своё - родное
- NickTsigouro
- Новичок
- Сообщения: 5
- Зарегистрирован: 16 Июнь 2006, 13:00
- Откуда: Москва
- Контактная информация:
- Олег
- Ветеран движения
- Сообщения: 122
- Зарегистрирован: 16 Июль 2005, 2:35
- Откуда: Москва
- Контактная информация:
Буквально сейчас случайно наткнулся на:
Может из-за этого?Обновление - KB319740
Обновление для Windows XP, которое исправляет ошибку утечки памяти в Graphics Device Interface (GDI) при создании/удалении дочернего окна. После установки этого обновления - потребуется перезагрузка компьютера.
_http://download.microsoft.com/download/6/6/9/6697a1d9-4734-4829-80b9-de3d74fb6049/WindowsXP-KB319740-v5-x86-RUS.exe
- Игорь Столяров
- Ветеран движения
- Сообщения: 7374
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
Спасибо - к сожалению, не помогло. Я тоже склоняюсь к мысли, что ответ зарыт где-то в глубинах класов ABC - но моих знаний явно недостаточно, что бы его откопать. Да и смысл ?
Видимо придется запомнить еще одну "особенность" Clarion и просто обойти ее. Например для задач переодического опроса - не открывать окна в потоке ...
Видимо придется запомнить еще одну "особенность" Clarion и просто обойти ее. Например для задач переодического опроса - не открывать окна в потоке ...
За теми кто отстал - не возвращаться. (С) Кодекс
- Олег
- Ветеран движения
- Сообщения: 122
- Зарегистрирован: 16 Июль 2005, 2:35
- Откуда: Москва
- Контактная информация:
Ну, почему-же - сразу "не открывать окна"!?
Просто используй для таких процедур обычный шаблон "Исходный текст", или как он там, в ABC, называется. Т.е., рисуй "ручное" окно а для его обработки используй стандартный ACCEPT-цикл с нужными событиями. А еще лучше - адаптируй шаблон "Window" из Legacy-набора к ABC-шаблонам. Главная идея - обработка окна ТОЛЬКО стандартными операторами языка БЕЗ использования ABC-классов.
Просто используй для таких процедур обычный шаблон "Исходный текст", или как он там, в ABC, называется. Т.е., рисуй "ручное" окно а для его обработки используй стандартный ACCEPT-цикл с нужными событиями. А еще лучше - адаптируй шаблон "Window" из Legacy-набора к ABC-шаблонам. Главная идея - обработка окна ТОЛЬКО стандартными операторами языка БЕЗ использования ABC-классов.
- Игорь Столяров
- Ветеран движения
- Сообщения: 7374
- Зарегистрирован: 07 Июль 2005, 10:19
- Откуда: г. Ростов-на-ДоМу
- Благодарил (а): 13 раз
- Поблагодарили: 48 раз
- NickTsigouro
- Новичок
- Сообщения: 5
- Зарегистрирован: 16 Июнь 2006, 13:00
- Откуда: Москва
- Контактная информация:
А у меня на ABC-шном фрейме все равно течет:
Код: Выделить всё
LegSpalsh PROCEDURE ! Declare Procedure
Thr Long
Window WINDOW('Caption'),AT(,,145,67),FONT('MS Sans Serif',8,,FONT:regular),TIMER(50),SYSTEM,GRAY,RESIZE, |
MDI
STRING(@s20),AT(28,29),USE(Thr)
END
CODE
Thr = Thread()
Open(Window)
Accept
Case Event()
Of Event:Timer
Break
! или Post(Event:CloseWindow), без разницы
end
end
WBR, Nick Tsigouro