Кроссплатформенный PostThreadMessage
_Vasilisk_
Дата: 27.08.2019 17:19:01
Есть, что-то из коробки, чем можно заменить PostThreadMessage. Чтобы работало под линукс?
Цель переключиться в контекст указанного потока и передать какой-то указатель. Подобное делает TThreadQueue, но она работает только в главный поток
С уважением, Vasilisk
kealon(Ruslan)
Дата: 27.08.2019 17:24:43
_Vasilisk_,
обычная очередь, так называемый канал, + поток который её разбирает
_Vasilisk_
Дата: 27.08.2019 17:27:38
kealon(Ruslan),
Нашел уже TThreadedQueUe<T>
Василий 2
Дата: 27.08.2019 18:33:28
Это ж просто тред-сейф очередь, разве что с таймаутом ожидания вместо обычного бесконечного висения. Никаких "переключений контекста" там нет.
_Vasilisk_
Дата: 27.08.2019 18:52:01
Василий 2 |
---|
Это ж просто тред-сейф очередь, разве что с таймаутом ожидания |
Там много чего есть
Василий 2 |
---|
Никаких "переключений контекста" там нет. |
Ну не все коту масленица. Иногда приходится программировать
procedure TMyThread.Execute;
var
LMsg: TMessage;
begin
while True do begin
LMsg := FQueue.PopItem;
if FQueue.ShutDown then
Exit;
// Process
end;
end;
kealon(Ruslan)
Дата: 27.08.2019 19:32:18
Василий 2 |
---|
Никаких "переключений контекста" там нет. |
не помню что бы где-то они были
_Vasilisk_
Дата: 29.08.2019 14:32:57
_Vasilisk_ |
---|
Нашел уже TThreadedQueue<T> |
Который до Delphi Tokio включительно содержит ошибку в методе Grow. В Rio ошибку исправили
kealon(Ruslan)
Дата: 29.08.2019 17:23:38
_Vasilisk_,
да, за дельфийским RTL глаз да глаз нужен
но в принципе для кросплатф. очереди списка\массива и классов из System.SyncObjs хватает с избытком
берёшь какой нить шарповый или явовский класс и заполняешь, как по учебнику, его реализацию
makhaon
Дата: 29.08.2019 20:21:58
_Vasilisk_,
исходники обычно можно править.
_Vasilisk_
Дата: 30.08.2019 14:38:00
makhaon |
---|
исходники обычно можно править. |
Спасибо, кэп! Только в данном случае нельзя. Ломается компиляция System.Classes (Unit System.Classes was compiled with a different version of System.Generic.Collections). Пришлось TThreadedQueue выносить в отдельный модуль и уже там править
kealon(Ruslan) |
---|
но в принципе для кросплатф. очереди списка\массива и классов из System.SyncObjs хватает с избытком |
В принципе для всего хватает ассемблера. Но хочется поменьше работы