Кроссплатформенный 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 хватает с избытком
В принципе для всего хватает ассемблера. Но хочется поменьше работы