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

Страшный БАГ в Visual C++ (3 стр)

Страницы: 1 2 3 4 511 Следующая »
#30
0:47, 3 мар. 2020

Ghost2
> Управлять двигателем,
Ой, лол. Видел когда-нибудь безынерционный шаговый движок, который трубы ворочает? С какой скоростью они летают?
Квант манагера задач виндового посмотри, там твой слип завалит цех трупами в две секунды после гудка. Не просто так цех сначала с одиноким инженером внутри запускают, лол.

> скажем, или считать какую-нибудь физику с заданной
> частотой,
Шаг интегрирования будет выбираться из соображений точности и контекста моделирования.
Интервал моделирования выбирается из показаний таймера.
Слип тут ни при чем.

> писать видео с экрана N раз в секунду.
Не будешь ты писать N раз в секунду. Ты будешь писать каждый N-ый кадр.
Слип тут ни при чем.

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


#31
0:50, 3 мар. 2020

Misanthrope
> а нефиг время переводить, уот так уот!
Серьезно?
Изображение

#32
0:51, 3 мар. 2020

MrShoor
> Для того, чтобы тред ничего не делал, и отдал процессорное время системе.
Для того, чтобы тред ничего не делал и отдал процессорное время системе, достаточно его завершить. Идеальный вариант. Слип тут причем?

> Очевидно помоему.
Нет. Не очевидно.

> У тебя есть другие предожения, чем заменить данный функционал?
Какой "данный"? Конкретная задача?

#33
(Правка: 1:04) 0:52, 3 мар. 2020

fsmoke
> std::this_thread::sleep_for
А что, среди нас действительно есть хипстера-смузисосы, которые смогли в modern C++ ?

+ Показать
#34
1:06, 3 мар. 2020

beejah
> Для того, чтобы тред ничего не делал и отдал процессорное время системе,
> достаточно его завершить. Идеальный вариант. Слип тут причем?
То есть ты на серьезных щщах предлагаешь раз в 100мс стартовать и убивать тред? Ок, а код, который это будет делать - как должен выглядеть? :)

#35
(Правка: 1:08) 1:08, 3 мар. 2020

beejah
> Какой "данный"? Конкретная задача?
Я же тебе там привел дальше конкретный пример. Попробуй дочитать моё сообщение до конца.

#36
1:10, 3 мар. 2020

MrShoor
> Бред же. Вот допустим тебе надо написать код, который переодически чекает
> открытый порт X на некотором сервере. Чтобы когда порт открывается - сделать
> некоторые действия. Как предлагаешь это делать?
Итц депендс. Давай я уточню задачу - выходить из этого замечательного спящего артефакта мы по диспетчеру задач будем или по SIGINT?

#37
1:15, 3 мар. 2020

MrShoor
> То есть ты на серьезных щщах предлагаешь раз в 100мс стартовать и убивать тред?
А. Т.е у нас все таки есть какая-то петля. И тайминг есть. Уже проясняется.

> Я же тебе там привел дальше конкретный пример. Попробуй дочитать моё сообщение
> до конца.
Я прошляпил, лол.

Я не думаю, что слип здесь будет катастрофой.
Но я бы таки искал способ его не втыкать. В принципе, софтина, которая дрочит пинг 10 раз в секунду и не делает больше ничего (пока не словит) - уже что-то странное.

#38
1:15, 3 мар. 2020

beejah
> Давай я уточню задачу - выходить из этого замечательного спящего артефакта мы
> по диспетчеру задач будем или по SIGINT?
Спящего 100мс? Да просто, выставим ему переменную, что треду пора выходить. На следующих 100мс когда тред проснется - он это увидит, и завершит свою работу.

#39
(Правка: 1:26) 1:23, 3 мар. 2020

MrShoor
> Да просто, выставим ему переменную
Откуда? Его (тред) что манажит? Если там сверху петля крутится - вообще никакой тред и никакой слип не нужен, просто по (t >= itsTimeToCheck) воткнул в любой хендлер таймера, и отлично. Например. А когда открыли - ну да, запускай тред, жди. Или не запускай и не жди, если ввод-вывод не блокирующий.  Да куча вариантов. Может, там вообще уже готовый шедулер есть, кто ж будет руками слип пихать.

#40
1:24, 3 мар. 2020

beejah
> А. Т.е у нас все таки есть какая-то петля. И тайминг есть. Уже проясняется.
У нас в любом случае есть петля. Т.к. сервер удаленный, открывает удаленно порт, и никому об этом не собщает. Единственный способ узнать что порт был открыт - попытаться законнектиться туда. И делать это надо с некоторым интервалом. Этот интервал будет либо у тебя в основном потоке (в котором ты будешь создавать каждый раз новый тред) либо внутри фонового потока.

> Я не думаю, что слип здесь будет катастрофой.
Ну вот, а только что ты был категорически против слипов.

> Но я бы таки искал способ его не втыкать. В принципе, софтина, которая дрочит
> пинг 10 раз в секунду
Да какая разница дрочит она его 10 раз в секунду или нет? Ну вот допустим надо дрочить раз в минуту. Мы вставляем тот же самый sleep(100), но дрочим порты только на каждое 600-е пробуждение.

> и не делает больше ничего (пока не словит)
Почему ничего больше не делает? Может быть делает. Это принципиально ничего не меняет.

#41
(Правка: 1:33) 1:31, 3 мар. 2020

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

#42
1:33, 3 мар. 2020

MrShoor
> Этот интервал будет либо у тебя в основном потоке
Он и должен быть в основном потоке. По хорошему.

> (в котором ты будешь создавать каждый раз новый тред)
Не буду, конечно.

> либо внутри фонового потока.
Не катастрофа. Но что-то пошло не так.

#43
1:34, 3 мар. 2020

beejah
> Откуда? Его (тред) что манажит?
Оттуда, куда приходят нотификации на завершение программы. Если консольное приложение, то  CTRL_CLOSE_EVENT, если оконное приложение, то WM_QUIT, если служба, то SERVICE_NOTIFY_STOP_PENDING.

> Если там сверху петля крутится - вообще никакой тред и никакой слип не нужен,
> просто по (t >= itsTimeToCheck) воткнул в любой хендлер таймера, и отлично.
Тебя послушать - так потоки не нужны. Делай всё в одном потоке на itsTimeToCheck и всё.

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

#44
1:34, 3 мар. 2020

MrShoor
> Ну вот допустим надо дрочить раз в минуту.
крон. На хер тут вообще какие-то слипы.

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