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

Вниз

Потокобезопасность DecodeDate()   Найти похожие ветки 

 
antonn ©   (2011-03-03 15:10) [0]

Является ли DecodeDate() (из SysUtils) потокобезопасной? Там в DecodeDateFully() есть примерно следующий код:
var
     DayTable: PDayTable;
begin
DayTable := @MonthDays[Result];
while True do  begin
         I := DayTable^[M];


где MonthDays объявлена глобально:
type
 PDayTable = ^TDayTable;
 TDayTable = array[1..12] of Word;

const
 MonthDays: array [Boolean] of TDayTable =
   ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
    (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));


Не будет корявок при доступе к этой константе из разных потоков?


 
clickmaker ©   (2011-03-03 15:17) [1]

> Не будет корявок при доступе к этой константе из разных
> потоков?

это же константа. С чего бы корявки возникнут при доступе только на чтение?


 
antonn ©   (2011-03-03 15:38) [2]

Не могу найти тему, недавно спрашивал, похожая ситуация была с константным массивом, Анатолий вроде говорил что могут быть затыки. Потому и переспрашиваю


 
Анатолий Вроде   (2011-03-03 15:45) [3]

>> Анатолий вроде говорил что могут быть затыки

Доступ к константам потокобезопасен. Затыков не будет.


 
antonn ©   (2011-03-03 16:12) [4]

а вот и старая темка http://delphimaster.net/view/15-1282149795


 
antonn ©   (2011-03-03 16:13) [5]

начиная с поста [33]


 
clickmaker ©   (2011-03-03 16:15) [6]

там про изменяемые константы, насколько я понял.
Надеюсь то время, когда число дней в месяце будет переменным, не наступит


 
antonn ©   (2011-03-03 16:20) [7]


> там про изменяемые константы, насколько я понял.

там в начале юнита объявление и никакого изменения по коду, только использование. Почти то же что и у меня тут, потому и спрашиваю еще раз.


 
clickmaker ©   (2011-03-03 16:23) [8]

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


 
antonn ©   (2011-03-03 16:30) [9]

Я не достаточно знаю внутренности получаемой в дельфи программы, как она и что выделяет и хранит, как читает.
Хорошо бы Анатолий откоментировался, почему там "по сути это переменная", а в этой теме можно не защищать.


 
clickmaker ©   (2011-03-03 16:39) [10]

> Хорошо бы Анатолий откоментировался, почему там "по сути
> это переменная",

он уже там откомментировался. Потому что типизированная константа - на самом деле не константа


 
clickmaker ©   (2011-03-03 16:40) [11]

впрочем, это настраивается в проекте и директивой {$J+}


 
antonn ©   (2011-03-03 16:40) [12]

а MonthDays здесь не такая же?


 
Anatoly Podgoretsky ©   (2011-03-03 16:41) [13]


> antonn ©   (03.03.11 15:10)  

А где тут DecodeDate?


 
Anatoly Podgoretsky ©   (2011-03-03 16:44) [14]


> clickmaker ©   (03.03.11 16:15) [6]

Оно уже примерно 400 лет переменное, пока один месяц, но все же


 
Anatoly Podgoretsky ©   (2011-03-03 16:45) [15]


> antonn ©   (03.03.11 16:30) [9]
> Хорошо бы Анатолий откоментировался, почему там "по сути
> это переменная", а в этой теме можно не защищать.

Я уже высказывал свое фи по поводу констант, которые в отличии от здравого смысла не совсем уж и не изменяемые.


 
antonn ©   (2011-03-03 16:51) [16]


> А где тут DecodeDate?

Смотреть сверху вниз начиная с YearOf(), так нагляднее:
type
PDayTable = ^TDayTable;
TDayTable = array[1..12] of Word;

const
MonthDays: array [Boolean] of TDayTable =
  ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31),
   (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31));

function YearOf(const AValue: TDateTime):Word;
var LMonth,LDay:word;
begin
      DecodeDate(AValue,Result,LMonth,LDay);
end;

procedure DecodeDate(const DateTime: TDateTime; var Year, Month, Day: Word);
var Dummy:Word;
begin
     DecodeDateFully(DateTime, Year, Month, Day, Dummy);
end;

function DecodeDateFully(const DateTime: TDateTime; var Year, Month, Day, DOW: Word): Boolean;
...
var
...
  DayTable: PDayTable;
begin
  ...  
   Result := IsLeapYear(Y);
   DayTable := @MonthDays[Result];
   M := 1;
   while True do
       begin
         I := DayTable^[M];


 
Противный   (2011-03-03 18:10) [17]

>> Я уже высказывал свое фи по поводу констант

Анатолий, а скажите, до каких пор нам терпеть begin и end в Pascal? Это же просто безобразие какое-то!


 
Anatoly Podgoretsky ©   (2011-03-03 20:27) [18]

> Противный  (03.03.2011 18:10:17)  [17]

А я убью за отсутствие begin и end, я тут согласен с Виртом


 
Противный   (2011-03-03 21:10) [19]

>> Anatoly Podgoretsky ©   (03.03.11 20:27) [18] <...>убью<...>

Это угроза? То есть, если молчать, то начало и конец так и останутся. А если ратовать за отмену, то придет Анатолий и убьет. И в том, и в другом случаях, получается - на всю жизнь. Разве что, в первом случае, можно надеяться, что хотя бы жизнь будет длинной. Но конец наступит обязательно.

Или смерть, или безнадега, а потом все равно смерть.

To be or not to be?
There is no question.

This is the end,
My only friend, the end<...>
Father, yes son, I want to kill you.

http://www.youtube.com/watch?v=QHFK1yKfiGo



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

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

Наверх




Память: 0.51 MB
Время: 0.008 c
2-1299212434
smart
2011-03-04 07:20
2011.06.12
Считывание значений из xml


15-1297418426
reqyz
2011-02-11 13:00
2011.06.12
Перевести 3 строчки C++ -> Delphi


15-1298541431
И. Павел
2011-02-24 12:57
2011.06.12
Как явно привести тип массива в яве?


15-1298368780
Andy BitOff
2011-02-22 12:59
2011.06.12
Как грамотно сохранить документацию?


2-1299002115
rodionov_uv
2011-03-01 20:55
2011.06.12
имя компонента