C ++ Builder обеспечивает три уровня разработки:
1. Компоненты (VCL и FMX)
2. Общие библиотеки (RTL).
3. API платформы (iOS, Android, Mac OS)
В этом посте мы обсудим общие библиотеки (RTL).
В C ++ Builder есть несколько сотен функций, макросов и классов, которые вы вызываете из своих программ на C и C ++ для выполнения широкого спектра задач, включая низко- и высокоуровневый ввод-вывод, манипулирование строками и файлами, выделение памяти, управление процессами. , преобразование данных, математические вычисления и многое другое.
Библиотека времени выполнения C ++ Builder (или RTL) состоит из ряда базовых файлов заголовков, которые обеспечивают базовую поддержку для большинства библиотек компонентов VCL и FireMonkey. РТЛ включает в себя процедуры, глобальные вспомогательные классы , такие как те , которые представляют собой потоки и списки, а также классы , такие как TObject, TPersistent и TComponent.
Несмотря на то, тесно связана с FireMonkey и VCL, то РТЛ не включает в себя какой — либо из компонентов , которые появляются на Палитра инструментов.
Вместо этого, классы и процедуры в RTL используются компоненты , которые делают появляются на палитре инструментов, и доступны для использования в коде приложения либо в VCL или проекты FireMonkey, или когда вы пишете свои собственные классы.
Например, заголовок System содержит большую часть библиотеки времени выполнения (RTL). Взаимодействие с другими людьми
И из заголовка системы, у вас есть System.Math.hpp заголовок , который определяет классы, процедуры, типы, переменные и константы , связанные с математическими операциями, векторами и матрицами.
Или System.Bluetooth.hpp заголовок , который предоставляет классы для использования возможности Bluetooth устройства, на котором выполняется приложение для подключения к приложениям , работающим на удаленных устройствах.
или System.Sensors.hpp заголовок , который обеспечивает классы и компоненты , которые позволяют получать информацию и управлять датчиками системы. Датчики , являются частями оборудования или программного обеспечения , которые могут обеспечить меры физических величин для ваших приложений.
Или System.Threading.hppзаголовок , который определяет классы и типы , которые реализуют в параллельную библиотеку программирования.
Давайте теперь посмотрим на примере C ++ Builder с использованием System.Threading.hpp заголовка и параллельного программирования библиотеки.
Для моего примера приложения, я буду использовать C ++ Builder 10.4 приложение проекта, которое использует общую библиотеку времени выполнения в приложении для нескольких устройств, используя заголовок RTL System.Threading и библиотеку параллельного программирования.
Вы можете скачать этот образец приложения проекта TParallelPrime.cbproj здесь.
Вот приложение проекта C ++ Builder, которое использует общую библиотеку времени выполнения в приложении для нескольких устройств, используя заголовок RTL System.Threading и библиотеку параллельного программирования.
[crayon-67500d8576142791191655/]В этом примере показано, как использовать метод TParallel.For из библиотеки параллельного программирования (PPL) . TParallel.For разбивает цикл for на части, которые выполняются параллельно, и использует задачи для выполнения этих частей.
Это приложение находит количество простых чисел от 1 до максимального значения, например 5 миллионов в этом приложении. Приложение рассчитает время, необходимое для этого, используя (1) классический цикл for, и мы сделаем то же самое, используя параллельную версию, используя метод TParallel.For.
В пользовательском интерфейсе приложений:
Кнопка «Для цикла» запустит серийную версию расчета простых чисе
[crayon-67500d8576148782678210/]Кнопка «Параллельный цикл» запускает параллельную версию вычисления простых чисел:
[crayon-67500d857614a939389712/]В поле Memo отображается время вычисления между классическим циклом for for (int I = 1; I <= Max; I ++) и версией параллельного цикла for с использованием метода TParallel :: For:
Как видно из расчетов, последовательному циклу For Loop потребовалось 814 миллисекунд, чтобы вычислить количество простых чисел от 1 до 5 миллионов, но для того же с использованием метода TParallel :: For требуется всего 267 миллисекунд. Я т ясно , что TParallel :: Для метода является более эффективным, и запускает приложение гораздо быстрее, так как он использует имеющийся процессор для выполнения процедур параллельно. Виртуальная машина, которую я использовал для своего раздела Windows, использует 4 ядра процессора, поэтому мы видим, что с помощью метода TParallel :: For приложение работает в основном в 4 раза быстрее! Чем больше ядер у вас будет, тем быстрее ваше приложение будет работать с использованием метода TParallel :: For!
Глядя на код, мы видим, как мы реализовали это приложение.
Если вы наведете курсор на #include <System.Threading.hpp> | Щелкните правой кнопкой мыши | Откройте файл в курсоре, вы откроете свой файл C: Program Files (x86) Embarcadero Studio 21.0 include windows rtl System.Threading.hpp .
Затем с помощью методов Insight | ищите для
Мы видим, что у нас есть 43 метода использования TParallel.For .
Глядя на первый, мы видим в этом заголовке System.Threading.TParallel.For он включает ряд перегруженных аргументов, что делает его очень подходящим для разработки на C ++!
Библиотека параллельного программирования (PPL) включает эту функцию цикла TParallel :: For , которая позволяет запускать его циклы параллельно!
И для всего этого существует пул потоков, который автоматически настраивается автоматически (в зависимости от нагрузки на ЦП), поэтому вам не нужно заботиться о создании или управлении потоками для этой цели!
Чтобы использовать библиотеку параллельного программирования в своем приложении, просто включите заголовок System.Threading. Этот заголовок имеет несколько функций, которые можно включить в новые и существующие проекты C ++ Builder.
Возвращаясь к пользовательскому интерфейсу приложения, когда мы нажимаем кнопку For Loop, мы видим, что используем обычную последовательную функцию For Loop, и проверяем, является ли наше число от 1 до 5 миллионов простым числом.
Чтобы проверить, является ли число простым числом, мы используем эту функцию в нашем приложении
[crayon-67500d857614c223433889/]Затем, когда мы нажимаем кнопку Parallel Loop, мы видим, что используем метод RTL TParallel :: For. А в C ++ нашу функцию IsPrime необходимо передать методу TParallel.For либо как событие Iterator, либо как C ++ 11 Lambda.
Для события Iterator вот как мы реализовали функцию IsPrime как событие Iterator
[crayon-67500d8576150168509990/]Второй вариант для передачи нашей функции C ++ IsPrime методу TParallel.For заключается в использовании лямбда- выражения C ++ 11 для Parallel :: For , как мы видим здесь в коде. Здесь мы видим наше лямбда-выражение: [&] (int AIndex) . Это захватывает нашу переменную по ссылке
[crayon-67500d8576152971301368/]Если вы запустите то же приложение с использованием кода Lambda, вы получите те же результаты.
При запуске приложения мы увидели, что TParallel :: For более эффективен, поскольку он использует доступные процессоры для параллельного выполнения процедур. И это приложение также показывает поддержку C ++ 11 в C ++ Builder, включая поддержку лямбда-выражений!
В заключение, C ++ Builder RTL включает библиотеку параллельного программирования (PPL).
Одним из прекрасных способов использования PPL является ускорение цикла за счет использования метода TParallel.For.
PPL, часть C ++ Builder RTL, в заголовке System.Threading также дает вашим приложениям возможность выполнять задачи параллельно, используя преимущества работы на нескольких устройствах ЦП и компьютерах. PPL включает ряд расширенных функций для выполнения задач, объединения задач, ожидания групп задач, а также метод TParallel :: For, который мы только что видели в этом приложении.
Некоторые дополнительные полезные ссылки:
Использование RTL (библиотеки времени выполнения )
Учебное пособие: использование цикла For из библиотеки параллельного программирования
Видео: как использовать Parallel Prime для C ++ Builder VCL.
Загрузите бесплатную 30-дневную пробную версию C ++ Builder сегодня по этой ссылке