|
Про многопоточность подскажите
|
|||
---|---|---|---|
#18+
Цитата [игнорируется] WaitingToRun (задача ожидает окончания выполнения другого процесса) Цитата [игнорируется] WaitingToRun (задача ожидает окончания выполнения другого процесса) http://www.proghouse.ru/programming/36-delphi-xe7-ppl Цитата [игнорируется] А теперь попробуем выполнить несколько задач параллельно. Для этого нужно создать массив задач, запустить задачи и ждать когда они выполнятся. Для ожидания есть две статические функции класса TTask: WaitForAll (ожидать выполнения всех задач) и WaitForAny (ожидать выполнения хотя бы одной из задач). uses System.Threading, System.SyncObjs; procedure TForm1.Button2Click(Sender: TObject); var tasks: array of ITask; task: ITask; value: integer; procedure CreateTasks; begin value := 0; tasks := [ TTask.Create(procedure() begin //Выполняем задачу 5 секунд. Sleep(5000); //Добавляем к результату 5000. TInterlocked.Add(value, 5000); end ), TTask.Create(procedure() begin //Выполняем задачу 3 секунды. Sleep(3000); //Добавляем к результату 3000. TInterlocked.Add(value, 3000); end ) ]; end; begin //Создаём задачи и инициализируем переменную value. CreateTasks; //Запускаем все задачи в массиве. for task in tasks do task.Start; //Ждём выполнение всех задач. TTask.WaitForAll(tasks); //Результат будет 8000. ShowMessage('Все задания выполнены. Результат: ' + IntToStr(value)); //Создаём задачи и инициализируем переменную value. CreateTasks; //Запускаем все задачи в массиве. for task in tasks do task.Start; //Ждём выполнение любой из задач. TTask.WaitForAny(tasks); //Результат будет 3000. ShowMessage('Все задания выполнены. Результат: ' + IntToStr(value)); end; И напоследок, ещё один пример, в котором я покажу, как обращаться к свойствам и контролам формы из процедуры задачи, как проверять статус задачи и как отменить её выполнение. ... |
|||
Гарыныч :
Клоп-жидок, тебе в 1991 году сколько годиков было? 19? :
Изменено: 28.11.2024, 17:27 - Гарыныч
Нравится:
Не нравится:
|
|||
28.11.2024, 17:25 |
|
Про многопоточность подскажите
|
|||
---|---|---|---|
#18+
Просто в другом потоке? А синхронизации данных вообще никакой? Ну, я выдал ей какие-то данные, запустил и жду, пока она их обработает. К данным не обращаюсь, пока она не закончит. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.11.2024, 23:10 |
|
Про многопоточность подскажите
#1225977
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
Ссылка на профиль пользователя:
Ссылка на вложение:
|
||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#18+
... |
||||||||||||||||
:
Изменено: 29.11.2024, 14:32 - s62
Нравится:
Не нравится:
|
||||||||||||||||
29.11.2024, 14:31 |
|
Про многопоточность подскажите
|
|||
---|---|---|---|
#18+
Просто в другом потоке? А синхронизации данных вообще никакой? Ну, я выдал ей какие-то данные, запустил и жду, пока она их обработает. К данным не обращаюсь, пока она не закончит. Так? А например запись в лог делается из доп. потока, которому передается строка, имя файла лога (или может писаться в лог по-умолчанию), поток создается, открывает файл, дописывает в конце строку, закрывает файл и прекращает свою работу и уничтожается. Делается через критическую секцию, на случай коллизий. Вот тут наверное можно было бы сделать через TTask. Описать процедуру и запустить её через TTask. Кстати, один момент тут - TTask использует пул потоков. Насчёт получения результата есть интерфейс IFuture, тоже по докам и примеру в доках знакОм. Там можно вызвать, позднее попытаться получить результат, и если он уже есть, то сразу получаем, если нет, то вызывающий поток ждет, пока будет. Есть ещё свойство Status, можно посмотреть, завершился таск или нет или в каком сейчас состоянии. ... |
|||
:
Изменено: 29.11.2024, 21:41 - s62
Нравится:
Не нравится:
|
|||
29.11.2024, 21:39 |
|
|
start [/forum/topic.php?fid=16&msg=1228632&tid=16781]: |
0ms |
get settings: |
12ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
390ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
72ms |
get tp. blocked users: |
2ms |
others: | 23ms |
total: | 538ms |
0 / 0 |