Size: a a a

2020 September 21

S

Serjone in Delphi & Lazarus
Alexey Shumkin
ну, у тебя уже поспрашивали про глобальность mplayer )
я бы сделал, как предлагал Ренат:
объект "воспроизводитель треков"
у него - метод добавления  трека для воспроизведения
который уже внутри может останавливать (либо добавлять в очередь) текущее воспроизведение и начинать добавленное..
он же и контролирует управление mplayer (и жизненный цикл её)
не надо использовать глобальные переменные ))
Этот объект нужно держать в отдельном потоке?
источник

AS

Alexey Shumkin in Delphi & Lazarus
Serjone
Этот объект нужно держать в отдельном потоке?
для чего? )
источник

S

Serjone in Delphi & Lazarus
Я чуть запутался в логике. Нужно при получении команды на воспроизведение, остановить всё, что сейчас играет и запустить то, что пришло в команде. Пока не очень понимаю почему при получении команды программа не видит, что что-то запущено. Чую, что связано с запуском в потоке, но объяснить не могу.
источник

G

Garik in Delphi & Lazarus
Serjone
Я чуть запутался в логике. Нужно при получении команды на воспроизведение, остановить всё, что сейчас играет и запустить то, что пришло в команде. Пока не очень понимаю почему при получении команды программа не видит, что что-то запущено. Чую, что связано с запуском в потоке, но объяснить не могу.
Просто чтобы убедиться, после того как ты уничтожаешь mPlayer он равен nil?
источник

S

Serjone in Delphi & Lazarus
Хм...
Есть функция, которая проверяет равен плеер Нилу, или не равен. Если не равен, то приравнивает и создаёт новый плеер.
С кнопки на форме это работает.
С события в хттпсервере не работает. Второе событие не видит созданного предыдущим событием плеера
источник

G

Garik in Delphi & Lazarus
тебя одно спрашиваешь, ты другое отвечаешь))
источник

S

Serjone in Delphi & Lazarus
Garik
Просто чтобы убедиться, после того как ты уничтожаешь mPlayer он равен nil?
Да, равен.
источник

S

Serjone in Delphi & Lazarus
Так лучше?
источник

G

Garik in Delphi & Lazarus
ты это продебажил или как определил?
источник

AI

Alexander Ivanov in Delphi & Lazarus
Viktor Akselrod
не. чтобы наверняка, надо

if Assigned(FSoundPlayer) then
begin
  FreeAndNil(FSoundPlayer);
  FSoundPlayer := nil;
end;

🙂
Достаточно FreeAndNil - все остальное не нужно.
источник

AI

Alexander Ivanov in Delphi & Lazarus
Внутри ведь все проверки есть.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Alexander Ivanov
Достаточно FreeAndNil - все остальное не нужно.
серьезно? спасибо 😁
источник

AI

Alexander Ivanov in Delphi & Lazarus
Проверка на Nil есть в деструкторе free
источник

S

Serjone in Delphi & Lazarus
Garik
ты это продебажил или как определил?
If mplayer=0 достаточно, или надо в регистры проца лезть, чтобы это проверить?
источник

AI

Alexander Ivanov in Delphi & Lazarus
А nil присваивается переменной в функции FreeAndNil
источник

AI

Alexander Ivanov in Delphi & Lazarus
Зачем доп проверки делать.
источник

VA

Viktor Akselrod in Delphi & Lazarus
Alexander Ivanov
А nil присваивается переменной в функции FreeAndNil
если бы ты внимательней посмотрел историю сообщений, то заметил бы сарказм
источник

S

Serjone in Delphi & Lazarus
Alexander Ivanov
Достаточно FreeAndNil - все остальное не нужно.
Проблема в том, что программа видит nill когда mplayer уже создан в предыдущем событии
источник

G

Garik in Delphi & Lazarus
Serjone
If mplayer=0 достаточно, или надо в регистры проца лезть, чтобы это проверить?
если там что то типа if mplayer = nil then Log("mplayer = nil"), который тебе вывел эту строку, то достаточно
источник

S

Serjone in Delphi & Lazarus
Garik
если там что то типа if mplayer = nil then Log("mplayer = nil"), который тебе вывел эту строку, то достаточно
Тогда да, продебажил
источник