Войти
ФлеймФорумПрограммирование

Страшный БАГ в Visual C++

Страницы: 1 2 310 11 Следующая »
#0
(Правка: 18:37) 18:34, 2 мар. 2020

Тут наткнулись на лютый треш на мой взгляд

в Майкрософтовском STD есть ошибка со слипами, например со std::this_thread::sleep_for

Пример:

Если поставить std::this_thread::sleep_for спать 100 мс, и в этот момент поменять системное время на час - программа не выйдет из sleep_for целый ЧАС!!!

Это капец товарищи!!

В МС сделали фикс, но не торопятся его релизить, т.к. он ломает ABI. По мне - пусть мне придётся всё пересобрать, но я не буду ломать голову почему мой софт завис у клиента если он перевёл часы.

Предлагаю голосовать, чтоб они быстрее шевелились:

Вот ссылка на issue:

std::this_thread::sleep_for depends on system time

ПС
Нужно залогиниться и нажать на кружок с числом слева


#1
(Правка: 18:46) 18:45, 2 мар. 2020

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

#2
18:52, 2 мар. 2020

а нефиг время переводить, уот так уот!

#3
18:53, 2 мар. 2020

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

#4
19:07, 2 мар. 2020

beejah
Пока не переспишь, не поймешь.

#5
19:24, 2 мар. 2020
+ Показать
#6
19:25, 2 мар. 2020

nes
fsmoke уже переспал на целый час.

#7
19:37, 2 мар. 2020

Предлагаю не менять системное время во время слипа

#8
19:40, 2 мар. 2020

fsmoke
Ну так ты же в своём примере переводишь системное время программно, прямо там же где и твой sleep_for.
Оно еще и прав администратора требует. Лютый треш, как в Microsoft такое вообще всерьёз воспринимают?
nes
> Вот очередное доказательство того, что лучше брать буст
В этом случае и boost с stlport'ом не помогут.

#9
19:44, 2 мар. 2020

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

#10
19:46, 2 мар. 2020

Я думал в любом нормальном языке есть monotonic_time на который полагаться можно.

#11
19:47, 2 мар. 2020

fsmoke

> но я не буду ломать голову почему мой софт завис у клиента если он перевёл часы
Возьми, да сам напиши этот sleep_for.

> Предлагаю голосовать, чтоб они быстрее шевелились
Да бесполезно это.

beejah

> Слип - козлопоклонничество, содомия, империализм
Его можно заменить всякими обманками типа CV, waitable timer, и ожиданием в MsgWaitForMultipleObjects (с ними или без). Некоторые даже select вызывают для этого. Но суть на винде останется прежней, поэтому твое негативное отношение к слипу непонятно.

На линуксе и clock_nanosleep, я получал точность просыпания потока в 10 +/-5 микросекунд от заданного периода. Линукс правда был с RT патчами, на ванильном не тестил.

#12
(Правка: 20:00) 19:52, 2 мар. 2020

kipar
Нет. Нельзя. Для постоянной возрастающей последовательности заводи счётчик на атомиках. Монотонное время всегда растет, это действительно так, но замерять время на нем нельзя, потому что эта логика будет глючить на вещах вроде гибернации и прочего суспенда виртуальной машины.

#13
(Правка: 20:06) 20:04, 2 мар. 2020

Ghost2
> Его можно заменить всякими обманками типа CV, waitable timer, и ожиданием в
> MsgWaitForMultipleObjects (с ними или без).
Это называется не "заменить", а "выкинуть нахер то, что сразу тащить не надо было".

> Некоторые даже select вызывают для этого.
> Но суть на винде останется прежней, поэтому твое негативное отношение к слипу непонятно.
Для чего "этого" и суть чего?

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

#14
(Правка: 20:10) 20:10, 2 мар. 2020

beejah
> Если, конечно, это не тестирующий код.
Даже если это тестирующий код. Знакома думаю ситуация, когда тест проходит за 200мс, а в случае если что-то упало - ждёт N секунд до ассерта. В итоге тестовый пак на тимсити если там несколько сломанных тестов, вместо 20 минут гоняется несколько часов прежде чем упасть и отправить письмо. Все блин, из-за таких умников со слипами.

Страницы: 1 2 310 11 Следующая »
ФлеймФорумПрограммирование