Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.07.2014, 19:51   #1
HellMercenariess
Форумчанин
 
Аватар для HellMercenariess
 
Регистрация: 27.07.2009
Сообщений: 547
Вопрос stopMIDIThread остановить миди

Проблемы при попытке остановить миди-трэк, этот код вточности скопирован с рабочего исходника там это работает у меня зависает.

Код:
 StopMIDIThread; 
 if hout <> 0 then close_midi_out;
процедура также автентичная
Код:
procedure StopMIDIThread;
var
 msg:TMsg;
 i:integer;
begin
if MIDIThreadActive then
 begin
  ms.stop_requested := True; //íåáåçîïàñíî, íóæåí event
  WaitForMIDIThreadExit;
  while not PeekMessage(msg,hwndApp,
                      WM_USER,WM_USER,PM_REMOVE) do Sleep(10);
 end;
	// Dump any previously-loaded MIDI text events
	kill_all_midi_text;

	// Unload any previously-loaded MIDI data
	if mh.num_tracks <> 0 then
		for i := 0 to mh.num_tracks - 1 do
		 begin
			th[i].dataptr := nil;
			if th[i].data <> nil then FreeMem(th[i].data);
      FillChar(th[i],sizeof(track_header_t),0);
		 end;
  mh.num_tracks := 0   
end;
Если попробовать просто закрыть прогу - жесткая ошибка.
Про попытке остановить зависает в любом случае, проигрывается что-либо или нет.
"Виновник этого парада,он не дурак, ушел как надо!" Похороны панка.

Последний раз редактировалось HellMercenariess; 03.07.2014 в 19:56.
HellMercenariess вне форума Ответить с цитированием
Старый 28.08.2014, 08:29   #2
HellMercenariess
Форумчанин
 
Аватар для HellMercenariess
 
Регистрация: 27.07.2009
Сообщений: 547
По умолчанию

по-прежнему зависает при попытке остановить, есть у когонибуть идеи как исправить?
"Виновник этого парада,он не дурак, ушел как надо!" Похороны панка.
HellMercenariess вне форума Ответить с цитированием
Старый 28.08.2014, 10:57   #3
blackstrip
Форумчанин
 
Аватар для blackstrip
 
Регистрация: 21.01.2012
Сообщений: 240
По умолчанию

А с отладчиком залезть в процедуру не пробовали?

В этом куске кода с непонятными переменными есть одно место:
Код:
while not PeekMessage(msg,hwndApp,WM_USER,WM_USER,PM_REMOVE) do Sleep(10);
Если отладчик залипает на этом месте, то надо внимательно посмотреть каждый параметр PeekMessage, может там hwndApp кривой передается (неинициализированная переменная) или еще что.

А может и в таинственной процедуре kill_all_midi_text; что нибудь происходит.

p.s. вот нашел исходник, на основе которого сделан ваш http://4coder.org/delphi-source-code....pas.html?text , но там черт ногу сломит)

Точку останова в начало процедуры поставьте. А потом закройте прогу - посмотрите по шагам что там где, откуда проблемы и залипы.
blackstrip вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Миди-клавиатура Icon Logicon 6 Alex Dirus Компьютерное железо 0 10.10.2012 11:45
Шифр в миди Lois Свободное общение 6 23.05.2011 12:42
Как отослать миди-сообщение на айдио-интерфейс artemvyrtosu Помощь студентам 0 14.06.2010 14:31
Воспроизведение миди формата Испанец91 Мультимедиа в Delphi 4 17.05.2010 00:43
Работа со "значением" миди Stormtrooper Мультимедиа в Delphi 9 12.04.2010 09:21