| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > Запись данных в Com-порт |
| Автор: mishapk 10.10.2012, 14:56 | ||
В Com-порт при помощи буфера размером 320 байт записываются данные в цикле.
Необходимо чтобы за одну секунду происходило ровно 50 записей в порт. Но при изменении значения Sleep(x) получаем следующие значения: x=16 -> 31(зап.в сек) x=15 -> 73 (зап.в сек) Подскажите как добиться 50 записей в секунду? Или настройки порта или Более точный Sleep? |
| Автор: mishapk 10.10.2012, 17:28 | ||||||
| Более менее похожее сделал следующим образом: 1. Создал переменную и функцию
2. Добавил в цикл - цикл паузы c минимальным Sleep(1) без него идет загрузка ядра процессора до 15%
3. И самое главное запустил мультимедийный таймер перед началом работы цикла.
P.S. Пробовал обычный таймер тоже ведет себя не предсказуемо как и простой Sleep(15-16) и даже хуже. |
| Автор: xvr 11.10.2012, 13:43 |
Windows не Real Time система. Т.е. она вполне может усыпить вашу программу на пару секунд, если у нее случится что то свое, более важное Можно только более или менее приблизится к заветным 50ти записям в порт в секунду, но будьте готовы к тому, что периодически могут возникать 'выбросы'. Для начала переведите свою программу в real time (http://msdn.microsoft.com/en-us/library/windows/desktop/ms686219%28v=vs.85%29.aspx и http://msdn.microsoft.com/en-us/library/windows/desktop/ms686277%28v=vs.85%29.aspx), а потом уже и Sleep и/или multimedia timer Только будьте готовы к тому, что если ваше приложение повиснет где то в цикле, то вам придется перезапускать компьютер |
| Автор: Riviero 11.10.2012, 16:45 |
| А если посылать 50 пакетов, а уже потом ждать до секунды? |