powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Языки программирования семейства Pascal [закрыт для гостей] / Про многопоточность подскажите, Поиск: Искать сообщения, созданные автором: s62  
7 сообщений из 7, страница 1 из 1
Языки программирования семейства Pascal / Про многопоточность подскажите
    #749019
s62
Скрыть профиль Поместить в игнор-лист
s62 
Участник
Просто Трёп [игнорируется] 
Можно посылать сообщения потоку функцией PostThreadMessage. Тогда, если в потоке нет своего цикла обработки сообщений, его надо организовать при помощи например функции PeekMessage.

Насчёт евентов - это хороший вариант, но надо понимать, что поток, который будет ожидать срабатывания события при помощи функции WaitForSingleObject или WaitForMultipleObjects, будет в состоянии ожидания.

Службы никогда не писал (вроде, не припоминаю такого :) ) не особо представляю, что там удобно.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Про многопоточность подскажите
    #749089
s62
Скрыть профиль Поместить в игнор-лист
s62 
Участник
Просто Трёп  01.04.2024, 15:28
[игнорируется]
А обратно? Оно в обе стороны будет работать?
Если сообщения, то посылать можно из любого потока любому. Но чтобы поток мог принимать их, в нем должен быть цикл обработки сообщений. Вот в обычном Windows приложении на Delphi в главном потоке такой цикл уже есть, его VCL реализует.
Насчет событий, ну в моей практике отношения между потоками обычно были несимметричными. Например один поток подготавливает какие-то данные и выдает другому, чтобы тот передал их по сети. Или один поток всё время обменивается данными с каким-то устройством и периодически или сам их выдает или у него запрашивают какие-то данные.
Вот кстати со скуля один человек учебник написал несколько лет назад про многопоточность:
https://github.com/loginov-dmitry/multithread/blob/master/multithread_in_delphi_for_beginners.md

https://resql.ru/forum/topic.php?fid=58&tid=2036872
Правда не скажу сейчас, насколько хорошо написано, хотя начинал читать.
...
Изменено: 01.04.2024, 18:50 - s62
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Про многопоточность подскажите
    #749094
s62
Скрыть профиль Поместить в игнор-лист
s62 
Участник
IT-Клоп  01.04.2024, 18:55
[игнорируется]
Ну и тем более такой тяжеловесный механизм использовать для общения между потоками - плохо имхо.
Да не особо тяжеловесный. Я сам правда один раз с этим дело имел, и то, другой человек делал, а я подрихтовывал. Сообщения через PostMessage, PostThreadMessage хороши тем, что асинхронная обработка - один поток не ждет, пока второй обработает сообщение. Добавил сообщение в очередь и дальше занимается своими делом. А с критическими секциями могут быть коллизии, когда один поток ждет другой. Но да, критические секции - норм, тоже ими не раз пользовался.
Неизвестно, что за служба у Просто Трепа и что за обмен данными там между потоками.

p.s. Один раз - сообщения от потока в другой доп. поток, так что там цикл обработки сообщений делали. А из доп. потока в основной поток GUI приложения передавать данные через PostMessage или оповещать через это, так это много раз использовал, это по-моему удобно. Ну со службами тут другая история.
...
Изменено: 01.04.2024, 19:05 - s62
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Про многопоточность подскажите
    #749101
s62
Скрыть профиль Поместить в игнор-лист
s62 
Участник
IT-Клоп  01.04.2024, 19:12
[игнорируется]
Надо смотреть, что за задача.
Вот-вот.
...
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Про многопоточность подскажите
    #749103
s62
Скрыть профиль Поместить в игнор-лист
s62 
Участник
IT-Клоп [игнорируется] 
Один поток может подготавливать данные, потом "взводить" событие, а второй по событию их считывать и обрабатывать. Как одна из простых схем.
...
Изменено: 01.04.2024, 19:23 - s62
Рейтинг: 1 / 0
Нравится: IT-Клоп
Языки программирования семейства Pascal / Про многопоточность подскажите
    #749106
s62
Скрыть профиль Поместить в игнор-лист
s62 
Участник
Просто Трёп [игнорируется] 
Если схема такая, что один пихает данные, а второй берет их и потом куда-то отправляет, то очередь можно использовать. Поток, который пихает, добавляет элементы в очередь. А который берет и что-то с ними делает, забирает из очереди по мере возможности, пока в очереди что-то есть.
Вот тут, если использовать не потокобезопасную очередь, можно как раз использовать критическую секцию. Первый поток входит в секцию, добавляет элемент, выходит, второй входит, забирает, выходит.
...
Изменено: 01.04.2024, 19:47 - s62
Рейтинг: 0 / 0
Языки программирования семейства Pascal / Про многопоточность подскажите
    #749110
s62
Скрыть профиль Поместить в игнор-лист
s62 
Участник
Просто Трёп [игнорируется] 

Очереди-то есть:
https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.Generics.Collections.TQueue
https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.Generics.Collections.TThreadedQueue
Я когда-то сам на основе динамического массива очередь делал. Но тут уже готовые. )
...
Рейтинг: 1 / 0
Нравится: Просто Трёп
7 сообщений из 7, страница 1 из 1
Форумы / Языки программирования семейства Pascal [закрыт для гостей] / Про многопоточность подскажите, Поиск: Искать сообщения, созданные автором: s62  
Читали тему (1): Анонимы (1)
Игнорируют тему (2): erbol, папа акуз
Читали форум (3): Анонимы (1), Bing Bot 7 мин., Yandex Bot 8 мин.
Пользователи онлайн (30): Анонимы (15), prostozevs, Кусь, Yandex Bot, Гарыныч, IT-Клоп 1 мин., Ветер 1 мин., Квейд 1 мин., Сталкер 4 мин., Bing Bot 4 мин., megabyte 6 мин., Буся 6 мин., anonymous 6 мин., Tabula Rasa 7 мин., s62 7 мин., Просто Трёп 8 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]