![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Потокобезопасность 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]> Не будет корявок при доступе к этой константе из разных
> потоков?
это же константа. С чего бы корявки возникнут при доступе только на чтение?