Форум: "Начинающим";
Текущий архив: 2011.06.12;
Скачать: [xml.tar.bz2];
ВнизПотокобезопасность 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.003 c