OberonCore https://forum.oberoncore.ru/ |
|
многопоточность https://forum.oberoncore.ru/viewtopic.php?f=31&t=3966 |
Страница 1 из 1 |
Автор: | sk1981 [ Четверг, 17 Май, 2012 22:25 ] |
Заголовок сообщения: | многопоточность |
Приветствую! Я решаю вопрос о возможности или невозможности перехода с С++ на Компонентный Паскаль / BlackBox. Я прочитал сообщение о языке, проделал кое-какие эксперименты и у меня возникли некоторые вопросы, в частности, - вопрос о многопоточности. Кажется её там нет. Если нет, тогда чем заменить? В упрощенном виде, моя задача такая: 1. Программа воспроизводит музыкальный файл, предварительно полностью загрузив его в ОЗУ. 2. Во время воспроизведения я загружаю в программу следующий файл, также в ОЗУ. Во время загрузки воспроизведение первого файла НЕ ДОЛЖНО ПРЕРВАТЬСЯ. 3. Как только второй файл загрузился он играет одновременно с первым. Если я пишу это на С++, то задача решается созданием двух потоков: для загрузки и для воспроизведения. Второй работает с наивысшим приоритетом. Код: CRITICAL_SECTION cs; void *указатель_на_музыку_в_озу; поток_загрузки() { EnterCriticalSection(cs) free(указатель_на_музыку_в_озу); указатель_на_музыку_в_озу = malloc(); read_file_to_memory(указатель_на_музыку_в_озу, file); LeaveCriticalSection(cs); } поток_воспроизведения() { if (TryEnterCriticalSection(cs)) { play_music(указатель_на_музыку_в_озу); LeaveCriticalSection(cs); } else { /*если музыка сейчас загружается, то по указателю void *указатель_на_музыку_в_озу не обращаемся т.к. он указывает неизвестно куда*/ } } Вопрос: такая задача разрешима на Компонентном Паскале? |
Автор: | Илья Ермаков [ Пятница, 18 Май, 2012 07:54 ] |
Заголовок сообщения: | Re: многопоточность |
Асинхронность (не многопоточность) в КП/ББ реализуется через объекты Services.Action. Но для этого надо делить на отдельные части каждую активность. Т.е. read_file_to_memory и play_music должны быть реализованы в неблокирующем стиле (begin_read_file_to_memory...). Кстати, Windows поддерживает асинхронное чтение файла. А DirectShow (если вы используете его) - асинхронное воспроизведение. |
Автор: | Евгений Темиргалеев [ Пятница, 18 Май, 2012 08:53 ] |
Заголовок сообщения: | Re: многопоточность |
sk1981 писал(а): ...прочитал сообщение о языке... вопрос о многопоточности. Кажется её там нет... Если я пишу это на С++, то задача решается созданием двух потоков... Если я не ошибаюсь, в таком виде задача на КП разрешима ровно также как и на C++. Вы же используете библиотечные средства многопоточности, а не языковые. Код: EnterCriticalSection(cs) ... LeaveCriticalSection(cs) ... TryEnterCriticalSection(cs))... Вопрос: такая задача разрешима на Компонентном Паскале?Код: DEFINITION WinApi ["KERNEL32.dll"]; P.S. Вы же в win-ББ работали. Эта многопоточность в нём используется (поглядите Kernel.InstallKeyboardInt и Kernel.KeyboardWatcher).
... PROCEDURE EnterCriticalSection (VAR [nil] lpCriticalSection: RTL_CRITICAL_SECTION); ... PROCEDURE LeaveCriticalSection (VAR [nil] lpCriticalSection: RTL_CRITICAL_SECTION); ... PROCEDURE TryEnterCriticalSection (VAR [nil] lpCriticalSection: RTL_CRITICAL_SECTION): BOOL; ... END WinApi. |
Автор: | GameHunter [ Понедельник, 18 Июнь, 2012 17:17 ] |
Заголовок сообщения: | Re: многопоточность |
Кажнтся, в ББ автоматический сборщик мусора не многопоточный (кроме экспериментальной сборки Ильи Ермакова)? |
Автор: | Info21 [ Понедельник, 18 Июнь, 2012 23:31 ] |
Заголовок сообщения: | Re: многопоточность |
GameHunter писал(а): Кажнтся, в ББ автоматический сборщик мусора не многопоточный (кроме экспериментальной сборки Ильи Ермакова)? Да, и не надо сложностей на свою ... голову.
|
Автор: | Alexander Shiryaev [ Понедельник, 18 Июнь, 2012 23:38 ] |
Заголовок сообщения: | Re: многопоточность |
[url]http://ru.wikipedia.org/wiki/Событийно-ориентированное_программирование[/url] [url]http://ru.wikipedia.org/wiki/Автоматное_программирование[/url] |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |