Threadsafe способ конвертировать время между часовыми поясами - PullRequest
3 голосов
/ 07 июня 2011

Я пишу приложение для преобразования utc-времени в разные часовые пояса, теперь я могу использовать что-то вроде этого

putenv("TZ=TIMEZONE1"); 
tzset()
...
do time conversions

, но я не думаю, что это потокобезопасно, поэтому есть ли C /Библиотека C ++, которая может выполнять преобразование часового пояса, принимая часовой пояс в качестве аргумента функции, а не глобальный

Ответы [ 2 ]

3 голосов
/ 07 июня 2011

Возможно, вам нужен собственный код / ​​библиотека, способная обрабатывать часовые пояса.Обработка стандартной библиотеки очень обратная и не подходит для работы с чем-то более сложным, чем один часовой пояс, который установлен на время жизни программы.

Однако одним из возможных решений было бы выделение разделяемой памяти, fork и измените часовой пояс в дочернем процессе, затем передайте результат обратно через разделяемую память для чтения после возврата waitpid в родительский процесс.Это немного дорого, но не так плохо, как кажется, поскольку fork быстро в современных системах.Мой опыт показывает, что 1 fork соответствует 2-3 pthread_create вызовам, а 1 pthread_create вызов соответствует 2-3 open вызовам.Поскольку изменение часовых поясов потребует открытия одного или нескольких файлов и выполнения операций ввода-вывода для них, вы, вероятно, не будете увеличивать общую временную стоимость более чем в 3-5 раз.Если бы вы могли использовать дочерний процесс для каждого часового пояса, с которым вы работаете, он, конечно, мог бы быть более эффективным.

2 голосов
/ 07 июня 2011

Boost.DateTime поддерживает преобразование часовых поясов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...