
![]() |
NetLab · Rules · Torrent Tracker · Have a problem? · Eng/Rus |
![]() ![]() ![]() ![]() ![]() |
Welcome Guest ( Log In | Register | Validation ) | Resend Validation Email |
Pages: (2) [1] 2 > ( Show unread post ) |
![]() |
|
Posted: 14-08-2005, 17:34
(post 1, #453730)
|
||
Мозговых Дел Мастер Group: Members Posts: 5478 Warn:0% ![]() |
возникла надобность синхронизировать таймер часами в BIOS.надо ето сделать в C++. вопрос в том как ето сделать?.если кто знает,то поделитесь идеями и опытом.спасибо ![]() |
||
|
Posted: 14-08-2005, 18:13
(post 2, #453749)
|
||
Сварливый Мозг Клуба ![]() Group: Roots Posts: 22892 |
ничего не понял. Что надо сделать? |
||
|
Posted: 14-08-2005, 18:44
(post 3, #453759)
|
||
Мозговых Дел Мастер Group: Members Posts: 5478 Warn:0% ![]() |
в C ++ делается таймер : обычный цикл. например : for i= 1 to 100.нужно чтоб каждый шаг цикла делался за 0.1 секунды, при чём на любом компе.скорость выполнения цикла зависит от скорости проца.по етому ,чтоб не быть привязаным к конкретному компу надо привязать время выполнения шага цикла к часам в BIOS. проблема собственно в том и состоит как привязать время выполнения шага цикла к часам в BIOS ![]() |
||
|
Posted: 14-08-2005, 19:58
(post 4, #453791)
|
||
Newbie Group: Members Posts: 44 Warn:0% ![]() |
GetTickCount() спасет отца русской демократии |
||
|
Posted: 14-08-2005, 20:14
(post 5, #453799)
|
||
Мозговых Дел Мастер Group: Members Posts: 5478 Warn:0% ![]() |
спасибо ![]() так же знающие люди посоветовали поексперементировать с командой SLEEP |
||
|
Posted: 14-08-2005, 20:22
(post 6, #453803)
|
||
Кто жизнь познал, тот не спешит ![]() Group: Global Moders Posts: 10476 |
О! Это классная команда. Но с ней надо только на выходные эксперементировать. Вот я сегодня, например, в час дня проснулся. |
||
|
Posted: 14-08-2005, 20:30
(post 7, #453810)
|
||
Мозговых Дел Мастер Group: Members Posts: 5478 Warn:0% ![]() |
и сколько милисекунд длился твой сон? ![]() код скинь ![]() |
||
|
Posted: 14-08-2005, 21:07
(post 8, #453833)
|
||||||
Мышъ с сыром Group: Prestige Posts: 5279 Warn:0% ![]() |
Для Windows правильнее использовать QueryPerformanceCounter(), она более точная ![]()
Это для винды. Для Юникса использовать gettimeofday(), там всё элементарно. Отмечаешь в начале цикла текущее время, потом делаешь что тебе нужно, потом опять получаешь отметку времени, если разница меньше твоей 0.1 секунды, делаешь Sleep() на остаток времени, параметр у него в миллисекундах, поэтому переведёшь секунды в ms сам. Винды точнее спать не умеют. Для Юникса легче всего использовать select().
В принципе, ещё желательно учесть время потраченное на сам цикл и время выполнения функций по получению времени, если нужна повышенная точность. |
||||||
|
Posted: 14-08-2005, 21:26
(post 9, #453845)
|
||
Flooder Group: Members Posts: 5248 Warn:0% ![]() |
Sleep не катит, насколько я помню. Глянь к нему описаловку. Если не ошибаюсь то там честно написано, что если дать Sleep(1000), то это не будет точно секунда... |
||
|
Posted: 14-08-2005, 21:37
(post 10, #453849)
|
||
Мышъ с сыром Group: Prestige Posts: 5279 Warn:0% ![]() |
A точнее на виндах всё одно не сделать. Поэтому и надо вводить поправки, пытаясь удержаться в пределах нормы. Нужно точнее, устанавливайти ось реального времени, сам я с ними не работал, окромя QNX. |
||
|
Posted: 14-08-2005, 21:43
(post 11, #453855)
|
||
Мышъ с сыром Group: Prestige Posts: 5279 Warn:0% ![]() |
Можно конечно не вызывать Sleep(), а крутиться в цикле, получая отметки времени с помощью функции что я привёл, она достаточно точная. Но это 100% загрузка компа, если не делать в этом цикле коротельнких Sleep-ов, например. Можно наверное ещё какие-нибудь callback-и на таймер повесить и вызывать процедуру, выполняющую нужные действия периодически, но это не попадает под условия исходной задачи. Да и не делал я никогда такого. |
||
|
Posted: 14-08-2005, 21:55
(post 12, #453860)
|
||
Мозговых Дел Мастер Group: Members Posts: 5478 Warn:0% ![]() |
мне бы функцию под DOS. т.к железо, которым дання прога должна управлять, дружит только с C++ под DOS |
||
|
Posted: 14-08-2005, 22:06
(post 13, #453864)
|
||
Мышъ с сыром Group: Prestige Posts: 5279 Warn:0% ![]() |
Ну тогда только остаётся писать обработчик прерывания 21H, функция 2CH. Но так как часики тикают каждые 18.2 миллисекунды то точность этого таймера невилика, 5-6 показаний времени в секунду. Точнее никак. |
||
|
Posted: 14-08-2005, 22:11
(post 14, #453870)
|
||
Мозговых Дел Мастер Group: Members Posts: 5478 Warn:0% ![]() |
izanoza,можешь пример кода кинуть ,если не сложно. ![]() |
||
|
Posted: 14-08-2005, 22:23
(post 15, #453873)
|
||
Мышъ с сыром Group: Prestige Posts: 5279 Warn:0% ![]() |
Я никогда на С++ их не программировал, а на ассемблере это было давным-двно, подзабыл уже всё. Тут в общих чертах про программирование аппаратных прерываний http://www.megalib.com/books/355/ch4.htm Здесь в серединке кое-что есть... http://emanual.ru/download/278-10.html Погугли, ещё что найдёшь. |
||
![]() |