Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Программисты долго мучаются с кодом прогаммы, изучают С++, WinAPI функции, MSDN. Потом пишут банальную систему защиты или навешивают банальный протектор, а крэкеры и реверсеры справляются с такой защитой за 5 минут. В итоге, продажи программы почти нулевые. Чтобы такого не допустить, тут самому надо немного поднабрать опыта отладки, реверсинга, тот же отладчик Ollydbg изучить или дизассемблер IDA Pro. Но где искать по крохам эти знания? Нет, конечно можно годами "методом тыка" разбираться, но куда быстрее видеокурс специальный посмотреть. Вот тут он есть: ссылка. Автор курса с большим опытом и объясняет понятно, я из этого курса много узнал про то как работает компьютер, процессор, про инструменты специальные и как с ними работать. Мои коллеги программисты на работе ничего такого и не знают, теперь я им нос утру.

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

Автор: 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. После того, как процесс завершится, то он будет автоматически удалён.



<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS