Если я вызываю СЕЙЧАС из нескольких потоков, могу ли я предположить, что это нормально, или мне нужно реализовать блокировку для этого? Я знаю, что форматирование даты и времени небезопасно, но как насчет чтения даты и времени? Кроме того, как насчет QueryPerformanceCounter? Я просмотрел, но не могу найти исчерпывающую документацию по безопасности потоков для этих низкоуровневых функций.
Могу ли я предположить, что функция Delphi NOW будет потокобезопасной?
29.11.2012
- Теперь потокобезопасно. Форматирование даты также, если вы делаете это правильно. QueryPerformanceCounter также является потокобезопасным. Windows API является потокобезопасным. 29.11.2012
- Документация должна предупреждать вас, когда функция API НЕ является потокобезопасной. В настоящее время функции по умолчанию являются потокобезопасными. 29.11.2012
- Правильное форматирование даты означает использование версий функций, которые принимают параметр
TFormatSettings
. 29.11.2012 - Или вызов функций, которые не получают параметров и никогда не меняют глобальную переменную FormatSettings (если она так называется) 29.11.2012
- Это не является потокобезопасным, поскольку другие функции могут по-прежнему изменять глобальные настройки, пока эта функция их использует. 29.11.2012
- @Golez Именно это я и сказал. Пока вы никогда не изменяете эти общие данные, они потокобезопасны. 29.11.2012
- Спасибо Дэвиду, Марьяну и Сергу за исчерпывающее сообщение. В настоящее время функции по умолчанию являются потокобезопасными. 29.11.2012
Ответы:
1
У вас есть доступ к SysUtils.pas
? У меня есть мои старые исходники Delphi4, а в Source\Rtl\Sys\SysUtils.pas
есть реализация Now()
. Кажется, он использует Win API GetLocalTime()
и собственные функции EncodeDate()
и EncodeTime()
. Все они потокобезопасны, поэтому Now()
также является потокобезопасным.
29.11.2012
Новые материалы
Как ИИ меняет сельское хозяйство
Прочтите Статью Кэтлин Уолч в Forbes о том, как ИИ меняет сельское хозяйство .
Сельское хозяйство и земледелие - одна из древнейших и важнейших профессий в мире. Человечество прошло долгий..
Slack: проектирование современных интерфейсов человека и ИИ
Когда Стюарт Баттерфилд выделил Slack из быстро исчезающей онлайн-игры Tiny Speck, его перспективы были в лучшем случае неопределенными. Существовал очевидный спрос на средства связи на рабочем..
HTTP1.1 против HTTP2
Http расшифровывается как HyperText Transfer Protocol, это в основном метод, который компьютеры и серверы используют для запроса и отправки информации. HTTP1.1 - это более старая версия Http, а..
Радость вырезания
Радость фрагментов
По какой-то причине, когда я начал программировать в колледже, я активно сопротивлялся целому ряду земных благ, которые сделали бы мою жизнь чуточку удобнее. Я в основном..
Создайте стройный слайдер с нуля без каких-либо внешних инструментов
Слишком долго я полагался на сторонние плагины и инструменты для простых слайдеров. Пока в один прекрасный день в моей крошечной голове не загорелась лампочка, которую я могу сделать..
Буферы протоколов, часть 01: соглашения об именах и файловая организация
Если вам нравится читать статьи на Medium и вы заинтересованы в том, чтобы стать участником, я буду рад поделиться с вами своей реферальной ссылкой!
Наши партнеры
Globex SCI — уникальная система, которая хранит и позволяет использовать большие базы данных, опубликованные в блокчейне. Используя алгоритмы глубокого обучения и ИИ, мы можем прогнозировать..
Now()
использует только свои собственные переменные и побочных эффектов быть не должно. 29.11.2012TDateTime
имеет точность только в миллисекундах, так зачем использовать QPC (который, как известно, НЕ безопасен в многопроцессорной среде, BTW) для получения значений даты/времени с наносекундным разрешением? 29.11.2012TDateTime
может их физически удерживать. 30.11.2012