Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Как правильно заканчивать работу программы Добавлено: 12.12.03 19:29  

Автор вопроса:  NightVolk | Web-сайт: dopesoft.narod.ru

Ну типа frmMain=Nothing и все такое. Помню когда-то давно был похожий вопрос, но поиск по форуму что-то не пашет.

Ответить

  Ответы Всего ответов: 19  

Номер ответа: 1
Автор ответа:
 Ворон



ICQ: 178095693 

Вопросов: 6
Ответов: 24
 Профиль | | #1 Добавлено: 12.12.03 19:56

Я делаю так:

Sub cmdExit_Click()

End

End Sub

Ответить

Номер ответа: 2
Автор ответа:
 Виталий51



ICQ: 224290361 

Вопросов: 8
Ответов: 50
 Web-сайт: www.feshin.info
 Профиль | | #2
Добавлено: 12.12.03 22:22

И в чем вопрос? - все просто!

Ответить

Номер ответа: 3
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #3 Добавлено: 12.12.03 23:11
End - не очень хорошо, все объекты созданные прогой в памяти(переменные, массивы,Recordset'ы и т.д.) остаются и безхозные шарахаются по ОЗУ. Если их мало и они маленькие то куда ни шло, а если занимают много места, то лучше избавиться от них. Просто Unload всем формам программы.

Ответить

Номер ответа: 4
Автор ответа:
 Malyav



ICQ: 8440085 

Вопросов: 15
Ответов: 117
 Web-сайт: malyav.narod.ru
 Профиль | | #4
Добавлено: 13.12.03 08:00

dim f as form

for each f in forms

uload f

set f=nothing

next

Ответить

Номер ответа: 5
Автор ответа:
 Ворон



ICQ: 178095693 

Вопросов: 6
Ответов: 24
 Профиль | | #5 Добавлено: 13.12.03 10:54

cresta, должен с тобой не согласиться. Оператор End выгружает из ОЗУ переменные и пр. По крайней мере так написано в двух книгах по VB, в которые я заглянул. А вот Unload всех форм оставит публичные переменные в памяти.

Ответить

Номер ответа: 6
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #6 Добавлено: 13.12.03 13:29

Это отрывок из Ликбеза (написал некто Эскин М., насколько я помню)

[24] Выход из формы

Из формы можно выйти несколькими способами :

Первый способ: Me.Visible = False. Он только скрывает форму, но ни в коем случае не выгружает ее. Альтернативой этому свойству может служить метод Hide. Например Me.Hide. Свойство Visible чаще используется для проверки, например:
If frmMain.Visible=False Then ...
Нажатие на крестик в верхнем правом углу абсолютно соответствует варианту - Unload Me
Преимуществами этих способов является то, что перед выгрузкой можно выполнить определенные проверки в событии Form_Unload, и даже отменить выгрузку формы, используя ее параметр Cancel.
Последний вариант - самый грубый. Он подразумевает прерывание программы в месте вывода метода End. Прерывая все действия и закрывая все существующие окна, независимо видимы они или нет, без обработки закрытия форм. Поэтому пользоваться этим способом крайне не рекомендую. <Конец цитаты>

Вот пример распределения памяти при запуске моей самой прожорливой программы:

Исходное (до запуска):файл подкачки 131 Мб, доступного ОЗУ 64 Мб

Прога запущена: файл подкачки 162 Мб, доступного ОЗУ 22 Мб

Выход  через Unload: файл подкачки 131 Мб, доступного ОЗУ 61 Мб

Выход через End: файл подкачки 147 Мб, доступного ОЗУ 46 Мб

Это цифры. Не из книги, а из TaskManager

А событие Unload кроме всего прочего придумано ещё и для того, чтобы в нем удалить переменные и объекты из памяти

Ответить

Номер ответа: 7
Автор ответа:
 Ворон



ICQ: 178095693 

Вопросов: 6
Ответов: 24
 Профиль | | #7 Добавлено: 13.12.03 22:05

При завершении через Unload (всех форм!), в ряде случаев, Task Manager показывает работающий процесс с именем только что завершенной программы! При переходе на End это исчезало. Системы: WIN98 и XP.

Ответить

Номер ответа: 8
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #8 Добавлено: 13.12.03 23:44
Противоречие:Если при Unload Task Manager показывает работающий процесс с именем только что завершенной программы, то доступной памяти будет меньше, чем при End, а на деле наоборот.

Ответить

Номер ответа: 9
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #9 Добавлено: 14.12.03 15:28
Блин, да я пожизни End пишу, и никаких проблем!

Ответить

Номер ответа: 10
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #10 Добавлено: 14.12.03 20:33
Да и у меня как-то особых проблем нет. Все довольны, все смеются

Ответить

Номер ответа: 11
Автор ответа:
 Ворон



ICQ: 178095693 

Вопросов: 6
Ответов: 24
 Профиль | | #11 Добавлено: 15.12.03 02:08

Ура. Ни у кого никаких проблем!!! :-) Редкость однако! :-))

Ответить

Номер ответа: 12
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #12
Добавлено: 15.12.03 04:17

Что за фигня? Unload для всех форм никогда не завершит процесс, их породивший! ExitProcess-то в этом случае не выполняется! Вы свое исследование, cresta, правильно провели? Комп перезагружали после первого замера?

Ответить

Номер ответа: 13
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #13
Добавлено: 15.12.03 08:51
> и даже отменить выгрузку формы, используя ее параметр Cancel
Отменить можно только в обработчике события QueryUnload, но ни в коем
случае не Unload (хотя и там, по-моему, тоже можно, но форма будет уже
выгружена и при установке Cancel=True загрузится новый экземпляр
формы).

Ответить

Номер ответа: 14
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #14
Добавлено: 15.12.03 09:36
Sharp, хотя я в дискуссию не въезжаю..., но возможно мой ответ будет
правльным в этом контексте :). После выгрузки главной формы
(прописанной в StartUp object) процесс автоматически завершается.

Ответить

Номер ответа: 15
Автор ответа:
 Pashenko



ICQ: 176176951 

Вопросов: 14
Ответов: 655
 Профиль | | #15 Добавлено: 15.12.03 09:56
Господа, я что-то не въехал, здесь обсуждают процесс завершения
программы или выгрузку всех её форм?
Насколько я понимаю, это не совсем одно и то же.

Кстати, по поводу:
>>После выгрузки главной формы (прописанной в StartUp object) процесс
автоматически завершается.

Это не правда:

StartUp object - Form1

Private Sub Form_Load()
Form2.Show
End Sub

Private Sub Form_Load()
Unload Form1
End Sub

Смотрим, что получилось...

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам