Приветствую!
Я решаю вопрос о возможности или невозможности перехода с С++ на Компонентный Паскаль / 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 *указатель_на_музыку_в_озу
не обращаемся т.к. он указывает неизвестно куда*/
}
}
Вопрос: такая задача разрешима на Компонентном Паскале?