что почитать посоветуете? В идеале чтоб материал был максимально сжатый, времени читать например всю книгу от ОмниМультитредингЛибрари у меня не будет..
А если есть какой-нибудь пример с мультипоточностью, то будет вообще класс.
мультипоточность в делфи?
то есть это не несколько работающих классов thread (ну крутится там цикл вечный или до сигнала , лишь бы паузу соблюдали) , обменивающиеся мухами или время от времени синхронизирующийся с основным потоком?
ищи описание и как работает TParallel.for
вечный цикл там не нужен. Просто надо реализовать неблокирующий функционал - например на кнопку нажали, в её обработчике начать в отдельном потоке выполнять долгую логику. При этом другие кнопки должны быть кликабельными. По завершению тот сынициализированный поток просто хотя бы алярм виндоу какое-нибудь выкидывает и все на этом.
смотри реализацию класcа Ttask
типовое описание потока, тут даже внешнее взаимодействие не надо. а лишь в конце синхронизировать.
Скока ошибок в терминах. У соседей расстреляли бы.
Что то почитать все равно придется. Или хелп, с демками. Или книгу. См Логинов - многопоточность в Delphi. MultiThreading - the Delphi Way.
Это очень простой случай. Достаточно форме postMessage посылать.
тут думал направление когда много потоков запустилось по внешнему событию , а потом ещё и данными меняются между собой, не беся пользователя (например хеши считают, с разных мест алгоритма и скидывают обработку, по идее дельфя и ос сама должна нагрузить разные ядра процессора). а потом пояснили что это один поток на одно событее пользователя и просто результат в конце выдать(синхрон с основным)
Задал в чат GPT вопрос: покажи пример кода на Delphi RAD 11 с использованием TTask Пример использования класса TTask в Delphi RAD Studio 11 для асинхронного выполнения задачи может быть следующим. В данном примере создается простая задача, которая выполняется в отдельном потоке и обновляет элемент управления TLabel в основном потоке после выполнения. uses System.Classes, System.SysUtils, System.Threading, Vcl.Forms, Vcl.Controls, Vcl.StdCtrls; procedure TForm1.StartTask; begin // Запуск асинхронной задачи с помощью TTask TTask.Run( procedure var Result: Integer; begin // Симуляция длительной операции Result := 0; for var i := 1 to 10 do begin Sleep(500); // Пауза 500 мс Result := Result + i; end; // Обновление UI в основном потоке TThread.Synchronize(nil, procedure begin Label1.Caption := 'Результат: ' + Result.ToString; end); end); end; ### Объяснение: 1. Создание задачи: TTask.Run запускает анонимную процедуру в отдельном потоке. 2. Выполнение вычислений: Внутри задачи выполняются операции, например, подсчет суммы чисел с задержкой. 3. Обновление UI: Так как UI-элементы нельзя обновлять из неосновного потока, используется TThread.Synchronize, чтобы безопасно изменить текст в Label1 из основного потока. ### Важно: При работе с элементами UI необходимо синхронизировать поток с основным потоком приложения, чтобы избежать ошибок доступа к элементам интерфейса.
Если данные, которые поток обрабатывает - доступны в это время эксклюзивно только ему, и больше никто другой не лезет в них - то с виду простая задача, можно в принципе даже не читая, а просто подкорректировав чужой пример
во, да, тип такого
а чем хуже class(TThread)?
да там скорее всего и не будет конкурентного доступа. Я доступ просто напросто закрою для других кнопок (тупо буду проверять енаблед кнопки основной). Пусть читают хелп пока обработка идет.
Еще нужно иметь ввиду, что в анаонимные методы замедляют работу если поток должен работать работать в васокпроизводительном режиме например, сортировка огромных списков, по крайней мере так пишет Марко Канту
Создаешь экземпляр TThread. Внутри Execute прописываешь свою логику. В конце логики пишешь Syncronize и выводишь алярм. Статей полно. Даже в книге Флёнова такое было.
Обсуждают сегодня