Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Потокобезопасность DecodeDate() [D7, XP]


antonn ©   (2011-03-03 15:10:00) 

Является ли 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));


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


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

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

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

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

To be or not to be?
There is noquestion.

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

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


Anatoly Podgoretsky   (2011-03-03 20:27:00) [2]

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

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


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

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

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


antonn   (2011-03-03 16:51:00) [4]


> А где тут 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];


Anatoly Podgoretsky   (2011-03-03 16:45:00) [5]


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

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


Anatoly Podgoretsky   (2011-03-03 16:44:00) [6]


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

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


Anatoly Podgoretsky   (2011-03-03 16:41:00) [7]


> antonn ©   (03.03.11 15:10)  

А где тут DecodeDate?


antonn   (2011-03-03 16:40:00) [8]

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


clickmaker   (2011-03-03 16:40:00) [9]

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


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

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

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


antonn   (2011-03-03 16:30:00) [11]

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


clickmaker   (2011-03-03 16:23:00) [12]

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


antonn   (2011-03-03 16:20:00) [13]


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

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


clickmaker   (2011-03-03 16:15:00) [14]

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


antonn   (2011-03-03 16:13:00) [15]

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


antonn   (2011-03-03 16:12:00) [16]

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


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

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

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


antonn   (2011-03-03 15:38:00) [18]

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


clickmaker   (2011-03-03 15:17:00) [19]

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

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо