Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2017, 19:46   #1
Winexcel
Форумчанин
 
Регистрация: 26.08.2013
Сообщений: 187
По умолчанию Потоко-безопасный класс

Здравствуйте, можно ли как-то создать класс за счет дженериков, который будет оборачивать существующий в критическую секцию при обращении к методам, полям, атрибутам?

Например сделать аналог TThreadList только на основе дженерика, который будет заранее знать все методы, поля, атрибуты класса и оборачивать их в критическую секцию. Реально ли такое? Без описания каждого конкретного класса? Например для класса TStringList я сейчас написал такой класс:
Код:
  TSynchronizeStringList = class(TStringList)
  protected
    FCriticalSection:TCriticalSection;
    function GetTextStr: string; virtual;
    procedure SetTextStr(const Value: string); virtual;
  public
    constructor Create;
    destructor Destroy; override;
    function Add(const S: string): Integer; override;
    procedure Clear; override;
    procedure Delete(Index: Integer); override;
    procedure Exchange(Index1, Index2: Integer); override;
    function Find(const S: string; var Index: Integer): Boolean; virtual;
    function IndexOf(const S: string): Integer; override;
    procedure Insert(Index: Integer; const S: string); override;
  end;
в данном классе перегружены все основные методы которые у меня используются разными потоками, вот один их них:

Код:
function TSynchronizeStringList.Add(const S: string): Integer;
begin
  Self.FCriticalSection.Enter;
  Result:=inherited;
  Self.FCriticalSection.Leave;
end;
Вопрос состоит в следующем: можно ли как-то создать подобный класс на основе дженерика(чтобы могли наследоватся от любого класса), или не дженерика если есть варианты лучше, и чтобы тот мог оборачивать всё в критическую секцию/мьютекс/семафор(одиночный) для создания потоко-безопасного обращения.
Winexcel вне форума Ответить с цитированием
Старый 09.05.2017, 20:07   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от Winexcel Посмотреть сообщение
Без описания каждого конкретного класса?
Нет, такое не реально.

А почему бы не взять готовую библиотеку? OmniThreadLibrary много готового.
Или написать простой парсер и генератор который поможет вам на генерировать нужные классы.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Безопасный двумерный массив. С++ Time1 Помощь студентам 2 04.07.2014 17:43
Безопасный почтавик??? мистери Безопасность, Шифрование 3 08.07.2012 19:25
не заходит в безопасный режим Лютик17 Операционные системы общие вопросы 3 18.06.2011 12:19
ГраФ и безопасный путь. xakkkkker Паскаль, Turbo Pascal, PascalABC.NET 1 10.05.2011 21:55
Безопасный ввод Noxil Паскаль, Turbo Pascal, PascalABC.NET 1 25.12.2008 20:36