Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.07;
Скачать: CL | DM;

Вниз

Что-то типа хеша   Найти похожие ветки 

 
Ruzzz ©   (2008-07-25 03:42) [0]

Как организовать доступ к разным переменным через одну функцию? Переменные разных типов. Нужно чтобы через эту функцию, внутри которой EnterCriticalSection...LeaveCriticalSection, доступ (read/write) к разным переменным был из разных потоков. В голову приходит только использование хеша для набора этих переменных, но может есть более быстрые способы?


 
Leonid Troyanovsky ©   (2008-07-25 10:51) [1]


> Ruzzz ©   (25.07.08 03:42)  

> Как организовать доступ к разным переменным через одну функцию?
>  Переменные разных типов

Это, как раз, и есть все через одну (критическую секцию):

EnterCriticalSection(cs);
 // читаем - пишем общую переменную нужного типа
LeaveCriticalSection(cs);

--
Regards, LVT.


 
Сергей М. ©   (2008-07-25 10:57) [2]

Непонятно, какое отношение использование КС имеет к хэшированию чего-то там ...


 
Anatoly Podgoretsky ©   (2008-07-25 14:54) [3]

Голову сломал с этим хешем и автором.


 
Ruzzz ©   (2008-07-25 16:28) [4]

Ну вот есть например у меня набор переменных, доступ к которым нужно выполнять в CriticalSection, как мне этой одной единственной функцией изменять/читать эти переменные? какие параметры ей предать, чтобы однозначно определить какая переменная? :( ну наверное я не могу выразить свою мысль. Хеш упомянул - использовать для хранения в нем этих самых переменных, ключ хеша - это имя переменной, другой способ в голову не приходит, либо для доступа к каждой отдельной переменной писать свою функцию?


 
Palladin ©   (2008-07-25 16:33) [5]

Function ВзятьПеременнуюСИменем(ИмяПеременной):Variant;
Begin
 EnterCriticalSection;
 Try
  If ИмяПеременной="Переменная1" Then Result:=Переменная1 Else
  If ИмяПеременной="Переменная2" Then Result:=Переменная2 Else
и так до потери пульса
 Finally
  LeaveCriticalSection
 End;
End;


 
Leonid Troyanovsky ©   (2008-07-25 16:34) [6]


> Ruzzz ©   (25.07.08 16:28) [4]

> нужно выполнять в CriticalSection, как мне этой одной единственной
> функцией изменять/читать эти переменные? какие параметры
> ей предать, чтобы однозначно определить какая переменная?

А чего жлобиться? Напиши столько функций, сколько надо.
Главное, чтобы чтение и запись ходили через одну и ту же КС.

В соседней ветке раздавали целый пример.

--
Regards, LVT.


 
Правильный$Вася   (2008-07-25 16:43) [7]


> Ruzzz ©   (25.07.08 16:28) [4]

имя переменной - это только для удобства кодирования
а в программе - это всего лишь адрес, никакого имени нет, какой хэш?
вот если ты будешь передавать адрес, то, при условии корректной обработки типа, можно будет чего-то присваивать


 
Ruzzz ©   (2008-07-25 16:57) [8]

Всем спасибо!

Решение с Variant - не плохое, но не охота связываться :)


> вот если ты будешь передавать адрес, то, при условии корректной
> обработки типа, можно будет чего-то присваивать


думал о таком, но по сути это то что должен делать за меня компилятор :)


> А чего жлобиться? Напиши столько функций, сколько надо.


Решил делать именно так


 
Palladin ©   (2008-07-26 00:32) [9]

осталось необходимые переменные оформить как published свойства и можно обойтись без умопомрачительной толпы if


 
Сергей М. ©   (2008-07-26 00:36) [10]


> сломал с этим хешем и автором.


Осмелюсь ляпнуть - автор зас..л великую тему синхронизации ошметками организации)



Страницы: 1 вся ветка

Текущий архив: 2008.09.07;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
3-1205271880
GanibalLector
2008-03-12 00:44
2008.09.07
backup/restore Firebird


15-1216466394
webres
2008-07-19 15:19
2008.09.07
Права на Web- ресурс


3-1205487538
Bless
2008-03-14 12:38
2008.09.07
ADO 2.8 в MSDN и Delphi 7 - две большие разницы?


15-1216089828
Slider007
2008-07-15 06:43
2008.09.07
С днем рождения ! 15 июля 2008 вторник


3-1205422412
Цукор5
2008-03-13 18:33
2008.09.07
OLE и FireBird