Помощь в написании студенческих работ
Антистрессовый сервис

Разработка процедур распределения потоков данных и сбора результатов

РефератПомощь в написанииУзнать стоимостьмоей работы

Распределяем количество каналов в каждом исполнительном модуле таким образом, чтобы заданное число модулей обеспечивало обработку всех возможных каналов ввода. В основном модуле предусмотрен механизм изменения количества модулей в зависимости от сложности реализации конечной системы. Это позволяет сбалансировать показатели производительности и количества занимаемых ресурсов компьютера… Читать ещё >

Разработка процедур распределения потоков данных и сбора результатов (реферат, курсовая, диплом, контрольная)

Рассмотрим написание процедур запуска исполнительных модулей, распределения потоков в основном модуле и сбор конечных результатов. Для этого в сервер Ядра системы MegaSenseV7 внесем изменения, связанные с переходом от последовательной обработки каналов на единой копии библиотеки Megalib к параллельной обработке данных с использование исполнительных модулей и класса взаимодействия. Как было описано ранее, основной процесс берет на себя функции ввода изображений по всем каналам. В зависимости от устройства ввода (или нескольких разнородных устройств) определяется максимальное количество разрешенных каналов ввода и основной модуль инициализирует свою собственную библиотеку, но без каналов обработки. Загружает устройство ввода и определяет максимальное число рабочих каналов.

UINT MaxSecChannels = MPResource (NULL);

UINT MaxUsesCarChannels = MPResource (CFENABLED);

MPCreateEx (MaxSecChannels, 0,0,0);

HDEVICE md = IDAdd (DeviceName, 0);

UINT MaxUsesChannels = IDGetMaxChannels ();

Устанавливаем разрешенное количество исполнительных модулей равное числу максимально возможного количества каналов ввода.

#define MAX_ENABLED_CLASSES 32.

TCWClass *WChannel[MAX_ENABLED_CLASSES];

UINT CW_Number;

memset (WChannel, 0, sizeof (TCWClass *)* MAX_ENABLED_CLASSES);

CW_Number = MAX_ENABLED_CLASSES;

if (MaxUsesChannels.

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

UINT *CW_Num = new UINT [CW_Number];

memset (CW_Num, 0, sizeof (UINT)*CW_Number);

UINT CW_Count=0;

for (int i=0;i.

CW_Num[CW_Count]++;

CW_Count++;

if (CW_Count>=CW_Number) CW_Count=0;

Создаем классы и инициализируем библиотеки, которые в них используются.

for (int i=0;i.

WChannel[i] = new TCWClass (this);

strcpy (WChannel[i]->CW_AlgPath, AlgPath);

WChannel[i]->CW_MPCreateEx (0,CW_Num[i], 0,0);

delete CW_Num;

Далее обращение к функциям модулей производится как к обычным локальным функциям, но через класс WChannel. Например:

WChannel[channel-channel/CW_Number*CW_Number]->CW_СFCHRestart (channel/CW_Number,&InitParam);

Для установки параметров кадра и передачи изображений введены дополнительные функции, которых нет в стандартных функциях библиотеки:

VOID TCWClass: CW_CFCHSetFrameParam (UINT Channel, TCHANNELPROPERTY *prop);

UINT TCWClass: CW_CFCHPutData (UINT Channel, void *imgbuf);

UINT TCWClass: CW_CFCHGetData (UINT Channel, MOTIONRESULT *MotResult, char *maskl);

Функция CW_CFCHSetFrameParam осуществляет установку параметров кадра для осуществления обмена меду классом и исполнительным модулем, функция CW_CFCHPutData осуществляется запуск исполнительного модуля на обработку, а функция CW_CFCHGetData обеспечивает чтение результатов обработки.

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

if (WChannel[ch-ch/CW_Number*CW_Number]->MFlag[ch/CW_Number]==FLAG_EMPTY).

WChannel[ch-ch/CW_Number*CW_Number]->CW_MDCHPutData (ch/CW_Number, Image);

Одновременно с этим в том же самом цикле осуществляем проверку окончания обработки ранее загруженного изображения и в случае наличия флага FLAG_READY осуществляем чтение результата. После завершения процедуры обмена флаг готовности исполнительного модуля устанавливается в состояние FLAG_EMPTY, что означает его готовность к приему очередных данных.

if (WChannel[ch-ch/CW_Number*CW_Number]->MFlag[ch/CW_Number]==FLAG_READY){.

WChannel[ch-ch/CW_Number*CW_Number]->CW_MDCHGetData (ch/CW_Number);

WChannel[ch-ch/CW_Number*CW_Number]->MFlag[ch/CW_Number] = FLAG_EMPTY;

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

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

for (int i=0;i.

if (WChannel[i]) {.

WChannel[i]->CW_MPRelease ();

delete WChannel[i];

}.

WChannel[i]=NULL;

MPRelease ();.

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

Оформление разработанных модулей в конечный продукт

После компиляции всех модулей и отладки программного обеспечения, разработанные модули можно включить в состав библиотеки разработчика MegaLib V1.2 в качестве дополнительной возможности при проектировании разнообразных многоканальных систем безопасности.

Разработанный и скомпилированный исполнительный модуль mpchannelmng. exe размещается в каталог библиотеки с соответствующим отражением в руководстве пользователя. В каталог документации размещается исходный код управляющего класса с подробным описанием всех методов и переменных, которые использует данный объект. К данным файлам относятся CWManager. cpp — исходный код на языке программирования C++ и CWManager. h — файл описания класса.

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

Показать весь текст
Заполнить форму текущей работой