Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

CradleA
Статус: Профессор
Рейтинг: 560
∙ повысить рейтинг »
solowey
Статус: Профессионал
Рейтинг: 493
∙ повысить рейтинг »
var
Статус: 3-й класс
Рейтинг: 140
∙ повысить рейтинг »

∙ С / С++

Номер выпуска:1978
Дата выхода:15.04.2020, 07:45
Администратор рассылки:Андрей Кузнецов aka Dr_Andrew (Старший модератор)
Подписчиков / экспертов:53 / 38
Вопросов / ответов:3 / 8

Консультация # 53142: Привет, эксперты. Вот я тут задумался, и у меня возник вопрос. Как реализовать многозадачность или многопоточность (не знаю что правильно)самому на си. Ну к примеру я хочу чтобы у меня играла музыка(простейшая, создаваемая спикером) и одновременно рисовались какие-нибудь фигурки на экране или что нибудь в этом роде, в общем какая-нить графика. Так ...
Консультация # 132750: Уважаемые эксперты, очень нужно решение двух программок: 1.Разработать программу "Группа студентов": вывод списка студентов, добавление студента, удаление студента, постраничный вывод, если список не вмещается в 24 строки, сортировка по фамилиям, логинам, оценкам по одной из 3-х специальностей. *** 2.Разрабо...
Консультация # 30963: Здраствуйте. Подскажите как в picturebox запихать файл изображений, bmp, jpg или gif. P.S. Не смейтесь я только учусь. Спасибо всем ответившим....

Консультация # 53142:

Привет, эксперты. Вот я тут задумался, и у меня возник вопрос. Как реализовать многозадачность или многопоточность (не знаю что правильно)самому на си. Ну к примеру я хочу чтобы у меня играла музыка(простейшая, создаваемая спикером) и одновременно рисовались какие-нибудь фигурки на экране или что нибудь в этом роде, в общем какая-нить графика. Так вот допустим у меня есть функция которая музыку играет PlayMySong(), вот я её вызываю, а далее идёт рисование графики, функция PaintMyShape(). Так всем известно, что пока не отработает первая функция переход ко второй функции не возможен. Звучит странно. Никто не задумывается когда играет в игры что одновременно звучит музыка и сама графика работает- но на это берёт ответственность сама windows, точнее её ядро. А как самому реализовать такую штуку чтобы в консоли работало или под чистым досом. Что почитать посоветуете ?Спасибо.

Дата отправки: 24.08.2006, 17:14
Вопрос задал: Александр Михайлович
Всего ответов: 6
Страница онлайн-консультации »


Консультирует Хватов Сергей (Академик):

Здравствуйте, Александр Михайлович!

Есть два пути:

1. писать приложение так, чтобы оно было event-driven, то есть только реагировало на всевозможные события приходящие извне: от оконной системы, устройств (tнажата клавиша, или буфер звуковой карты освобождается) и т.д. Путь хлопотный, но все GUI программы работают именно так, и соответственные библиотеки такое программирование сильно упрощают.

2. использовать threads Это проще (хотя подводные камни тоже имеются), но требуется, чтобы это поддерживалось в системе.

В любом случае к языку программирования это имеет отношение не слишком большое.

Консультировал: Хватов Сергей (Академик)
Дата отправки: 24.08.2006, 17:43
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует EPDSota:

Здравствуйте, Александр Михайлович!

В большом угрублении все выглядит так:
Устанавливаешь обработчик перрываний по таймеру. Он делает:
1. Проверяет, не выполняеться ли при этом критических задач (типа записи на диск), если они идут - доделывает их.
2. Записывает состояние задачи в свою внутреннюю таблицу: регистры процессора, стек, видеоданные
3. Берет из этой таблицы данные к следующей задаче, восстанавливает их и выполняет возврат из прерывания в эту задачу (удаляя из внутренней из таблицы)...

и следующая задача выполняется, пока не установиться прерывание по таймеру, дальше смтри п.1

так и получаеться - таблица текущих задач, которые процессор время от времени запускает. В современных процессорах есть много функции для поддержки такого режима работы.
В играх прерывания и переключения задач идут не только от таймера, а и от нажатой клавиши или окончания звучания отрывка, тогда и запускается соответствующая задача...

Консультировал: EPDSota
Дата отправки: 24.08.2006, 17:47
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Яруллин Азат Рифкатович:

Здравствуйте, Александр Михайлович!
Вот консольное приложение (см. приложение).
Считайте что функция PlayMySong() соответствует ThreadFunc1(), а PaintMyShape соответствует ThreadFunc2();
Пример демонстрирует как эти 2 функции работают параллельно.
Думаю, разберетесь.
P.S. Возможно, приведенный код написан не корректно... (но он работает). я писал его только чтобы показать работу потоков...
Удачи!

Приложение: