Тут лежит архив с демкой(Lazarus+FPC), которая воспроизводит ogg-файл в двух разных потоках. При компиляции демки при помощи FreePascal 2.4.x(пробовал разные версии из этой ветки) - приложение падает, как только первый поток завершает свою работу. В FreePascal 2.2.4 никаких проблем нет.
Содержимое архива:
bin - собранные exe и dll
Lazarus+FPC2.2.4 - файлы проекта для Lazarus 0.9.28.2 и FPC 2.2.4
Lazarus+FPC2.4.0 - файлы проекта для не очень свежего снапшота Lazarus и FPC 2.4.0
source - в хлам порезанные модули от библиотеки ZenGL. Интерес представляет только модуль zgl_sound.pas и функция snd_Proc. Все остальное исследовать бесполезно, т.к. отлично работает при использовании OpenAL вместо DirectSound.
Есть у кого какие идеи? :) Если надо какие-то комментарии/etc. по коду - спрашивайте.
[FPC 2.4.x][DirectSound]Поток "валит" приложение на выходе
Модератор: Модераторы
Тоже с этим сталкивался, так и не догнал в чём причина - как fastfix сошло sleep(100); (в зависимости от величины dsound буффера) в самом конце работы потока
Проблема решилась банально. Разработчики "поломали" менеджер памяти, и теперь в созданных потоках при помощи CreateThread можно ждать неожиданностей если используется RTL-функционал. Использование же BeginThread/EndThread к проблемам не приводит.
Использование же BeginThread/EndThread к проблемам не приводит.
Разве EndThread не приведёт к утечке памяти и непредсказуемому состоянию обьектов DSound?
Разве EndThread не приведёт к утечке памяти и непредсказуемому состоянию обьектов DSound?
Нет, если только ты не решил в отдельном потоке создавать dsound объект и не освобождая его выходить из потока
