![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2014
Сообщений: 9
|
В потоковом mp3 плеере потребовалось сделать вывод текущих треков с внешнего php-файла. Ниже привожу примеры кодов: первый с ручным обновлением, второй - автоматическое. Первый везде работает нормально, а во втором столкнулся с проблемой - на некоторых компьютерах после 3-4 минут работы плеер наглухо виснет. Подумал, что дело может быть в переполнении памяти (если ввести trace видно, что вывод запросов происходит ежесекундно). Действительно ли так, и если да, то как можно сократить частоту обновления?
var urlLoader:URLLoader = new URLLoader(); update_mc.addEventListener(MouseEvent.CLICK, updateSong); function updateSong(e:MouseEvent = null):void { var urlLoader:URLLoader = new URLLoader(); urlLoader.addEventListener(Event.COMPLETE,setInfo); urlLoader.load(new URLRequest("http://localhost/file.php")); function setInfo(e:Event):void{ var loader:URLLoader = URLLoader(e.target); name_txt.text = urlLoader.data; } } function callServer(e:Event):void{ var urlLoader:URLLoader = new URLLoader(); urlLoader.addEventListener(Event.COMPLETE,setInfo); urlLoader.load(new URLRequest("http://localhost/file.php")); function setInfo(e:Event):void{ var loader:URLLoader = URLLoader(e.target); name_txt.text = urlLoader.data; } } stage.addEventListener(Event.ENTER_FRAME, callServer); Последний раз редактировалось Zombie; 07.08.2014 в 21:44. |
|
|||||
|
Регистрация: Jan 2011
Сообщений: 200
|
ну так еще бы, вы каждый фрейм дергаете сервер. зачем так часто? поставьте таймер
|
|
|||||
|
Регистрация: Jul 2014
Сообщений: 9
|
Опять столкнулся с такой же ситуацией: при использовании функции автообновления внешнего php на некоторых компах флешка намертво виснет через несколько минут. Таймер установил, php обновляется исправно через 15 сек. Правда все равно программа продолжает ежесекундно выдавать запросы во внутреннем окне, не знаю должно быть так или нет. Но если даже заменить
на
- проблема не решается. Может кто-то глянет код.
import flash.net.URLLoader; import flash.net.URLRequest; import flash.events.Event; import flash.utils.Timer; import flash.events.TimerEvent; var timer:Timer = new Timer(15000, 0); timer.addEventListener(TimerEvent.TIMER, fTimer); timer. start(); function fTimer (e:TimerEvent){ stage.addEventListener(Event.ENTER_FRAME, callServer); } function callServer(e:Event):void{ var urlLoader:URLLoader = new URLLoader(); urlLoader.addEventListener(Event.COMPLETE, setInfo); urlLoader.load(new URLRequest("http://localhost/file.php")); function setInfo(e:Event):void{ trace(urlLoader.data); name_txt.text = urlLoader.data; } } |
|
|||||
|
Регистрация: Apr 2009
Сообщений: 409
|
лол)
|
|
|||||
|
Заметил, что почти все новички постоянно используют везде где только можно ENTER_FRAME. Наверное это связано с незнанием других событий.
Что вот это за чушь? // этот метод вызывается каждые 15 секунд function fTimer (e:TimerEvent){ // и добавляет всё ту же констнрукцию, которая будет дергать сервер каждый кад // в итоге происходит все ровно то же самое, что и в первом примере, только реализовано еще более криво stage.addEventListener(Event.ENTER_FRAME, callServer); } Это что, программирование "пальцем в небо"?)
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 2,283
|
ТС, запомни на будущее если есть место,где ты подписываешься на событие, должно быть и место,где ты от него отписываешься. В твоем случае даже если ты разберешься с частотой обновления, оно все равно со временем начнет лагать т.к. все ответы сервера складируются в памяти и неотписанный лисенер не дает сборщику мусора этот хлам почистить, просто добавь в setInfo строку:
|
|
|||||
|
Регистрация: Jul 2014
Сообщений: 9
|
Цитата:
![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|