![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 07.04.2016
Сообщений: 16
|
![]()
Есть задача: посылать в порт (COM/FTDI) пакеты данных с заданным интервалом от единиц до десятков миллисекунд.
Реализована через системную функцию Sleep() и хорошо работает под WinXP. Но при переносе на Win7 все нарушается. Вместо 5 мс делает 2,8..3,8 мс. Вместо 50 имеем 33..38 мс и тд. Получатель не дает квитирования, но имеет небольшой буфер, который в WinXP справляется, а под Win7 захлебывается. А надо, чтобы приложения работало как на компах под ХР, так и под семеркой. Есть у кого проверенные решения или полезные соображения? |
![]() |
![]() |
![]() |
#2 | ||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 07.04.2016
Сообщений: 16
|
![]() |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]() |
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,830
|
![]() Цитата:
Увеличьте ваши слипы в 2 раза и попробуйте. |
|
![]() |
![]() |
![]() |
#6 |
Заблокирован
Регистрация: 20.07.2017
Сообщений: 2
|
![]()
Задержку можно создать функцией NtDelayExecution из ntdll.dll, она по круче Sleep.
Про таймеры: Из прецизионных таймеров есть уже готовый timeSetEvent из winmm.dll. А самый точный таймер можно слепить самому (QueryPerformanceFrequency - сначала частоту таймера на данном железе узнаем) потом через QueryPerformanceCounter измеряем интервал в тиках. Это можно поместить в отдельный поток и задать ему хоть RealTime приоритет. Если двигаться ниже к асемблеру - там есть команда rtdsc, ей можно замерять производительность даже отдельных машинных кодов. |
![]() |
![]() |
![]() |
#7 |
Программист
Участник клуба
Регистрация: 23.06.2009
Сообщений: 1,772
|
![]()
И всё равно нельзя гарантировать, что именно в этот момент системе не захочется сбросить какие-то страницы в файл подкачки либо ещё как-то отвлечься
|
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]() |
![]() |
![]() |
![]() |
#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. |
|
![]() |
![]() |
![]() |
#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 |