C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 Класс управления потоками / Процессы и потоки / Приложение

Класс управления потоками.

Автор: Sherwood Hu

  • Скачать исходник - 3 Kb
  • Скачать демонстрашку - 24 Kb

    Введение

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

    Совместимость: VC 4-6, NT4, W2K, MFC

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

    С другой стороны я хочу показать использование порта IOCompletion. Он Довольно прост в использование и без особого труда позволяет передавать данные между потоками.

    Использование

    Для использования класса пула потоков, необходимо унаследовать собственный рабочий класс от IWorker и класс загруженности от IJobDesc. Логические схемы обработки информации должны содержаться в методе IWorker::ProcessJob(IJobDesc* pJob). После того как всё будет сделано, можно объявить потоковый пул:

    CThreadPool pool;
    pool.Start(6, 10);
    //сдесь выполняется некоторая работа
    pool.Stop();

    Функция Start имеет два параметра. Первый параметр - это минимальное количество рабочих потоков, которые можно породить. Второй параметр показывает максимальное количество рабочих потоков в пуле. Если потоковый пул будет сильно загружен, то автоматически начнут создаваться новые потоки. И наоборот, если пул будет простаивать, то лишние потоки будут "убиты". Поэксперементируйте с этими двумя параметрами, чтобы добится наилучшей производительности.

    Чтобы дать команду пулу выполнять некоторую работу, достаточно вызвать следующую функцию:

    pool.ProcessJob(pJob, pWorker);

    Заметка

    Если процесс занимает много времени, то вызов функции Stop()не остановит мгновенно вычисления. Функция Stop() будет ожидать максимум 2 минуты, а затем завершится. Эта функция имеет один параметр. Если его установить в true, то функция завершит рабочий поток в любом случае. Ежели установить параметр в false, то данный рабочий поток не завершится мгновенно и будет жить ещё какое-то время. В этой ситуации Вам прийдётся соблюдать осторожность, так как объект рабочего потока может уже не существовать после вызова функции Stop() и Вы получите ошибку доступа если попытаетесь обратиться к нему.

    Объект работы должен быть сгенерирован в "куче" используя оператор new. После того, как процесс завершится, то он будет автоматически удалён.