Освободить память

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Освободить память

Сообщение Scuder » 07.05.2004 (Пт) 15:38

Я тут уже писал об этом, повторю..

Есть на форме контрол - Windows Media Player с индексом 0.
Каждые 7 секунд он начинает проигрывать ролик:

Код: Выделить всё
Private Sub Timer3_Timer()

Me.Timer3 = False
Load Me.Roll(1)
Me.Roll(1).Visible = True
Me.Roll(1).FileName = App.Path + "\Rolls\xxx.avi"

End Sub


По клику на него или по завершению проигрывания выполняется следующий код:

Код: Выделить всё
Private Sub Roll_EndOfStream(Index As Integer, ByVal Result As Long)

Unload Roll(1)
Set Roll(1) = Nothing
Me.Timer3.Enabled = True

End Sub


И вот через несколько часов работы программы у Windows (2000) заканчивается виртуальная память и вся программа вылетает..

Вопрос: как правильно освободить память после окончания проигрывания файла?

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Сообщение Ennor » 07.05.2004 (Пт) 16:08

Может, тебе не стоит его грузить/выгружать, а просто играться со свойством Visible?

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 07.05.2004 (Пт) 16:26

Так сначала так и было. Он был без индекса, и я действительно просто делал его Visible/InVisible. Происходило то же самое. Собственно, поэтому я и подумал, что лучше его загружать и ВЫГРУЖАТЬ из памяти, но почему-то как раз процесс выгрузки и не работает корректно.. Т.е. сам контрол-то пропадает, но, видимо, память после себя не освобождает.. :-(

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 07.05.2004 (Пт) 18:40

А может просто что-то типа Roll(1).Close(). :!:

Или Roll(1).Application.Quit(что маловероятно присутствует)

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 11.05.2004 (Вт) 9:51

Нет там ни того, ни другого.. :-(

Сделал сейчас так:

Код: Выделить всё
Roll(1).Stop
Roll(1).Cancel
Unload Roll(1)
Set Roll(1) = Nothing


Это всё, что у него есть относительно выхода..
Хотя, я уверен, это не поможет..

Может, какой-нибудь другой плеер использовать?
Есть какие-нибудь советы?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: PetalBot, The trick и гости: 28

    TopList