|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
05.01.2008, 12:48 | #11 |
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
Ребята, QueryPerformanceCounter и всякие высокоточные таймеры - это конечно хорошо, но вы не учитываете две вещи:
1. Windows - система многозадачная, процессор(ы) - ресурс ограниченный. Различные потоки конкурируют за этот ресурс, а планировщик Windows управляет кому и когда отдать квант процессорного времени, при этом остальные потоки будут мирно ждать своей очереди. Вы не можете из программы прямо управлять планировщиком (только косвенно путем выставления приоритетов) и не знаете, когда у вашего потока заберут квант. Может получиться, что нужный интервал в 0,1 мс растянется на неопределенно долгое время. 2. Работа с портами (автору нужно отправлять запросы на порт) в Windows осуществляется также, как и с файлами - через драйверы файловых систем. Все запросы таким драйверам асинхронны по определению (даже если вызвать функцию ввода/вывода в синхронном режиме), т.е. мы просто кладем в некую очередь запрос на операцию, которая будет выполнена когда-нибудь кем-нибудь. При синхронном вызове функция просто дожидается окончания асинхронной операции. Когда операция будет выполнена - также определяет планировщик. |
05.01.2008, 13:25 | #12 |
Участник клуба Подтвердите свой е-майл
Регистрация: 14.12.2007
Сообщений: 1,434
|
Согласен с Ins и исходя из его цитаты, Вам прийдется заниматься пайкой схемы для управления двигателем (как я понял) и через программатор делать с ним все что хатиш, задавать время с точностью до 1нс. А из винды врядли получиться сотворить такое.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
|
05.01.2008, 21:43 | #13 |
Пользователь Подтвердите свой е-майл
Регистрация: 21.05.2007
Сообщений: 88
|
Обидно все таки - неужели ничего нельзя сделать. Программа уже почти готова, в смысле интерфейса, расчетов и т.д. и столько времени затрачено впустую? Когда начинал писать прогу даже не думал что на последнем этапе вылезет такая подлянка. Железо для управления есть,программа управления тоже есть и все прекрасно работает НО! в DOSe. Поэтому и занялся прогой под винду, просто чтоб интерфейс покруче был. Кстати пробовал в DOS на паскале функцию Delay - такая же ерунда как с таймером в дельфи. Под DOS прогу писал не я, даже не знаю остались исходники или нет надо поискать, но точно знаю что интервал времени задается замедлением системного таймера. Как насчет замедления системного таймера в Винде - возможно такое и что из этого получится? (Старая программа отлично работает под виндой в консольном варианте)
Уже Чему-то научился Но этого мало
|
05.01.2008, 22:05 | #14 |
Участник клуба Подтвердите свой е-майл
Регистрация: 14.12.2007
Сообщений: 1,434
|
Можно попробовать снести винду и работать с прогой чисто из ДОСА (т.к. однозадачный). Ну это как вариант... жаль просто твою работу и время. и лучьше взять старенькое железо, чет типа Пня 1 и пробовать.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
|
05.01.2008, 22:10 | #15 |
Участник клуба Подтвердите свой е-майл
Регистрация: 14.12.2007
Сообщений: 1,434
|
Притом у Вас уже есть прога которая работает хорошо из доса, к черту интерфейс, главное - результат.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
|
05.01.2008, 22:14 | #16 | ||
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
Цитата:
1. Существует некий аппаратный таймер, тикающий с частотой 55 мс (10 на NT). 2. Получив прерывание от этого таймера, управление получает планировщик потоков. 3. Планировщик потоков выполняет действия по диспетчеризации потоков. Например, если истек квант выполняющегося потока, планировщик передает управление другому. Если один из потоков вызвал Sleep, тем самым исключив себя из числа планируемых на определенный период, то планировщик уменьшает время ожидания, и если оно истекло - снова ставит поток в очередь планируемых. И наконец, если поток установил таймер, также проверяет, истек ли его период, и если да - генерирует сообщение WM_TIMER. Так как планировщик получает управление не чаще чем 55 (10) мс, то он не сможет соблюсти меньший период для таймеров. 4. Очевидно, что сообщение WM_TIMER кладется в очередь не чаще чем 55 (10) мс. Но и это не есть точное время срабатывания таймера. Сообщение будет обработано не сразу, а с некоторой задержкой во-первых потому, что положить сообщение в очередь - не есть сразу его обработать. Оно будет обработано лишь тогда, когда поток вызовет GetMessage или PeekMessage (а ведь в этот момент поток может быть занят чем-то другим или вообще квант будет принадлежать не ему) и направит его оконной функции. Более того, сообщение WM_TIMER имеет самый низкий приоритет (обрабатывается в последнюю очередь, если в очереди сообщений имеются другие) а также, если в очереди уже лежит WM_TIMER, новое сообщение не кладется. Из этого всего вывод, что юзер-таймеры Windows не обеспечивают точный период срабатывания, и погрешность тем больше, чем меньше период и чем выше нагрузка на процессор. Цитата:
PS: А что вы с такой частотой слать хотите и на какой порт, коли не секрет? Последний раз редактировалось Ins; 05.01.2008 в 22:21. |
||
05.01.2008, 22:19 | #17 |
Пользователь Подтвердите свой е-майл
Регистрация: 21.05.2007
Сообщений: 88
|
Так то оно так но все таки хотелось бы под винду. К томуже в старой проге надо кое чего добавить, а если исходники не найду, то все с нуля но уже для ДОСа.
Уже Чему-то научился Но этого мало
|
05.01.2008, 22:25 | #18 |
Форумчанин
Регистрация: 29.12.2007
Сообщений: 137
|
chingiz, а что вы хотели? Система реального времени и многозадачность - это две вещи взаимно исключающие друг друга. Либо у нас много задач, между которыми нужно делить процессорное время, либо у нас одна но очень важная задача, у которой никто процессорное время отнять не может и она будет делать что хочет и когда захочет, никто ее не прервет.
|
05.01.2008, 22:33 | #19 |
Участник клуба Подтвердите свой е-майл
Регистрация: 14.12.2007
Сообщений: 1,434
|
CHINGIZ, я живу в городе машиностроителей и немного знаю обо всей этой каше. Для управления на заводах станками используют не проги из под винды (это просто смешто). Я приведу свои аргументы против:
- у тя нет проги под винду - если захочеш запатентовать или продать проэкт, прийдется повозится с лицензией винды - многозадачность винды проявляется в том что она выполняет задачу и в это же время тупит P.S. под ДОС прогу интерфейс "забацать" тоже можно
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
|
05.01.2008, 22:48 | #20 | |
Пользователь Подтвердите свой е-майл
Регистрация: 21.05.2007
Сообщений: 88
|
Цитата:
2) Программа управляет станком с ЧПУ. На данном этапе нужно обеспечить перемещение стола станка с максимальной скоростью 600 мм/мин а это при имеющемся типе двигателя 60000 управляющих импульсов/минуту на управляющую схему привода, или 1000 импульсов в секунду. Все это передается через LPT.
Уже Чему-то научился Но этого мало
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выполнение функции | nikleb | JavaScript, Ajax | 7 | 10.08.2008 01:49 |
указатель мыши автоматически должен совершать клик по заданному месту на экране, через промежуток времени | Deefrost | Qt и кроссплатформенное программирование С/С++ | 5 | 16.05.2008 20:25 |
Как зделать авто выполнение | Editor | Общие вопросы Delphi | 5 | 27.04.2008 21:01 |
Выполнение действия с компонентами в цикле | Ermiss | Общие вопросы Delphi | 4 | 01.11.2007 23:54 |
Выполнение действия в заданное время | WOWan234 | Помощь студентам | 6 | 02.05.2007 01:52 |