|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.02.2018, 12:19 | #1 |
Пользователь
Регистрация: 07.04.2016
Сообщений: 16
|
Как выдержать точный временной интервал в Win7?
Есть задача: посылать в порт (COM/FTDI) пакеты данных с заданным интервалом от единиц до десятков миллисекунд.
Реализована через системную функцию Sleep() и хорошо работает под WinXP. Но при переносе на Win7 все нарушается. Вместо 5 мс делает 2,8..3,8 мс. Вместо 50 имеем 33..38 мс и тд. Получатель не дает квитирования, но имеет небольшой буфер, который в WinXP справляется, а под Win7 захлебывается. А надо, чтобы приложения работало как на компах под ХР, так и под семеркой. Есть у кого проверенные решения или полезные соображения? |
06.02.2018, 12:42 | #2 | ||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,708
|
Цитата:
Цитата:
|
||
06.02.2018, 14:59 | #3 |
Пользователь
Регистрация: 07.04.2016
Сообщений: 16
|
|
06.02.2018, 15:22 | #4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
|
06.02.2018, 15:24 | #5 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,708
|
Цитата:
Увеличьте ваши слипы в 2 раза и попробуйте. |
|
06.02.2018, 22:13 | #6 |
Заблокирован
Регистрация: 20.07.2017
Сообщений: 2
|
Задержку можно создать функцией NtDelayExecution из ntdll.dll, она по круче Sleep.
Про таймеры: Из прецизионных таймеров есть уже готовый timeSetEvent из winmm.dll. А самый точный таймер можно слепить самому (QueryPerformanceFrequency - сначала частоту таймера на данном железе узнаем) потом через QueryPerformanceCounter измеряем интервал в тиках. Это можно поместить в отдельный поток и задать ему хоть RealTime приоритет. Если двигаться ниже к асемблеру - там есть команда rtdsc, ей можно замерять производительность даже отдельных машинных кодов. |
06.02.2018, 23:42 | #7 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
И всё равно нельзя гарантировать, что именно в этот момент системе не захочется сбросить какие-то страницы в файл подкачки либо ещё как-то отвлечься
|
07.02.2018, 00:58 | #8 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,330
|
|
07.02.2018, 06:48 | #9 | |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
p51x
Пробежался по вашей статье. С выводами автора я несогласен. Тем более он пишет про win 8 которую я нетестировал. В win7 никаких 0.5 мс нету. Black Fregat Цитата:
Сброс страниц происходит редко. В спокойном состоянии около 1 страницы в минуту. Так что с долей успеха 50 мс вполне можно получить. Только от sleep надо отказаться, а использовать цикл. PAG Но вот если хотите меньше, то надо ставить микроконтроллёр, который будет играть роль буфера. Буфер рассчитывайте на 1 секунду задержки. А ещё лучше если он сам будет генерировать нужные данные/сигналы. Тем более контроллёры дешовые по 1-2 доллара.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . Последний раз редактировалось Pavia; 07.02.2018 в 07:11. |
|
07.02.2018, 08:12 | #10 |
Старожил
Регистрация: 03.01.2014
Сообщений: 2,870
|
То, есть Вы делаете выводы о статье не имея собственного представления о платформе на основе которой она написана?
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задать временной интервал в php | grundik1 | PHP | 2 | 25.04.2015 16:58 |
Как правильно выдержать html и php. | Predator199 | PHP | 14 | 07.03.2012 21:11 |
Временной интервал | MaRKer.nsk | Общие вопросы C/C++ | 2 | 03.11.2010 10:04 |
Как получить точный таймер | WaxeP | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 5 | 25.07.2010 18:25 |
Как реализовать точный таймер (до мксек) | evgengold | Общие вопросы Delphi | 11 | 03.03.2009 11:41 |