Отговори на тема  [ 21 мнения ]  Отиди на страница 1, 2  Следваща
Timer със C++ builder 6 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Ное 28, 2005 10:49 am
Мнения: 86
Местоположение: Русе
Мнение Timer със C++ builder 6
Търся начин да реализирам таймер. Сещам се за 3 начина в момента. Първият е sleep(), но не ми харесва защото не мога да правя нищо друго освен да чакам. Другият е да използвам timer от C Buildera, но и тук положението е същото. Третият, най оптимален за мен (поне за сега), е да сравнявам изминало време от часовника на компа. Та въпросът ми е има ли някакъв начин за инициализация и стартиране на таймер и когато изтече да влиза в някакъв хендлер ? Използвам C++ Builder 6.


Пон Юли 14, 2008 8:19 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Каква точност ти трябва?


Пон Юли 14, 2008 9:01 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Пон Ное 28, 2005 10:49 am
Мнения: 86
Местоположение: Русе
Мнение 
Реконструктор написа:
Каква точност ти трябва?

Ами до милисекунди да речем.


Вто Юли 15, 2008 12:06 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Еми без нишки май няма да стане. :(


Вто Юли 15, 2008 9:52 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 9:39 pm
Мнения: 2277
Мнение 
MSDN, функцията SetTimer, ако ти трябва по-малко време може да погледнеш какво пише за QueryPerformanceCounter :)


Вто Юли 15, 2008 3:19 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
SetTimer работи максимум със стотни, Sleep също. :)


Вто Юли 15, 2008 4:36 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
За прецизно време ползвай на пентиумите RDTSC.


Сря Юли 16, 2008 8:07 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Фев 04, 2005 9:59 pm
Мнения: 6019
Местоположение: София
Мнение 
woody написа:
За прецизно време ползвай на пентиумите RDTSC.

Но не го ползвай в мобилни и многоядрени пентиуми. 8)

PS. За токова информация колкото си дал толкова можем да ти помогнем.
Ако разкажеш по на щироко какво искаш да направиш и как точно го правиш тогава ще можем и да ти помогнем по конкретно.

_________________
Warriors of the Night, ASSEMBLER!!!


Чет Юли 17, 2008 12:30 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Юли 31, 2007 2:55 pm
Мнения: 1792
Местоположение: София
Мнение 
ike написа:
woody написа:
За прецизно време ползвай на пентиумите RDTSC.

Но не го ползвай в мобилни и многоядрени пентиуми. 8)


И си прав. :-)

http://en.wikipedia.org/wiki/RDTSC

Under Windows platforms, Microsoft strongly discourages using RDTSC for high-resolution timing for exactly these reasons, providing instead the Windows APIs QueryPerformanceCounter and QueryPerformanceFrequency.

http://en.wikipedia.org/wiki/High_Precision_Event_Timer


Чет Юли 17, 2008 11:18 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Нед Юли 24, 2005 10:28 am
Мнения: 2658
Мнение 
SetTimer прави точно това което искаш, но ако не ти стига точност гориш. разбира се може да ползваш нишка отделна + Sleep, там точността е май до милисекунда.


Пет Юли 18, 2008 8:40 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
zaphod написа:
SetTimer прави точно това което искаш, но ако не ти стига точност гориш. разбира се може да ползваш нишка отделна + Sleep, там точността е май до милисекунда.


Батка, и двете имат точност до стотна.


Пет Юли 18, 2008 9:08 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Яну 19, 2007 9:16 am
Мнения: 1063
Местоположение: путинофили: "иди н***й"
Мнение 
Реконструктор написа:
zaphod написа:
SetTimer прави точно това което искаш, но ако не ти стига точност гориш. разбира се може да ползваш нишка отделна + Sleep, там точността е май до милисекунда.


Батка, и двете имат точност до стотна.


NtSetTimerResolution (ntdll.dll) - променя резолюцията на таймера ... според зависи (за мойта виста е 0.5ms) ..превкл. на нишки ...

в многозадачна система е много трудно постижим тайминг от 1ms ... винаги ще има нещо с по-голям приоритет ...

най-простото решение е нишка с THREAD_PRIORITY_TIME_CRITICAL и sleep(1) ... (за да не топлиш CPU-to)
но гаранция - нямаш !

_________________
путинофили: "иди н***й"


Пет Юли 18, 2008 10:27 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
ps66 написа:
NtSetTimerResolution (ntdll.dll) - променя резолюцията на таймера ... според зависи (за мойта виста е 0.5ms) ..превкл. на нишки ...


Честно казано, не бих рискувал да ползвам недокументирани вътрешни функции, при това такива, от които зависи функционирането на системата. :)

ps66 написа:
в многозадачна система е много трудно постижим тайминг от 1ms ... винаги ще има нещо с по-голям приоритет ...


Да. Времеви щампи могат да се вземат със супер голяма прецизност, напр. може да се прочете тук:
http://www.mvps.org/directx/articles/se ... ctions.htm
Но да се направи нещо циклично, което да работи с честота 1 КHz е доста трудно.

ps66 написа:
най-простото решение е нишка с THREAD_PRIORITY_TIME_CRITICAL и sleep(1) ... (за да не топлиш CPU-to)
но гаранция - нямаш !


Sleep(1) почти никога не значи това. Най-често значи Sleep(10), ако си спрял всички сървиси и нямаш почти нищо работещо може да стане и Sleep(няколко ms). Пробвал съм го на практика. Най-лесният начин е, както казваш, THREAD_PRIORITY_TIME_CRITICAL, но вътре няма Sleep, а в цикъла викаш QueryPerformanceCounter непрекъснато. Задръства се цялата система с твойте глупости, ама ако е embedded/dedicated не ти пука. :)
Имах една идея - правиш няколко хиляди нишки и вътре Sleep(1) и QueryPerformanceCounter, като се опреснява глобален брояч. Нишката, на която се падне да прехвърли 1 ms. вика ф-ята която върши работата.


Пет Юли 18, 2008 11:45 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Реконструктор написа:
ps66 написа:

Имах една идея - правиш няколко хиляди нишки и вътре Sleep(1) и QueryPerformanceCounter, като се опреснява глобален брояч. Нишката, на която се падне да прехвърли 1 ms. вика ф-ята която върши работата.


Ой... 8O Звучи много брутално :D Интересно като идея. Стреляйки с картечница, вместо с пистолет има доста по-голям шанс да улучиш десятката. Но пак няма гаранция колко близо до центъра ще попаднеш ;)

И все пак - леотрон - каква е целта на задачата?


Пет Юли 18, 2008 12:00 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Яну 19, 2007 9:16 am
Мнения: 1063
Местоположение: путинофили: "иди н***й"
Мнение 
Реконструктор написа:
ps66 написа:
NtSetTimerResolution (ntdll.dll) - променя резолюцията на таймера ... според зависи (за мойта виста е 0.5ms) ..превкл. на нишки ...


Честно казано, не бих рискувал да ползвам недокументирани вътрешни функции, при това такива, от които зависи функционирането на системата. :)
....


съвсем "документирано" си е : http://technet.microsoft.com/en-us/sysinternals/bb897569.aspx :)

a Sleep(1) - ти осигурява най-малкото закъснение възможно в момента което зависи от приоритета на нишката, приоритена на приложението, ... и всичко останало ... без да заема 100% ресурсите на CPU :)
и на-важното .. със сигурност зависи от NtSetTimerResolution!

_________________
путинофили: "иди н***й"


Пет Юли 18, 2008 12:56 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 21 мнения ]  Отиди на страница 1, 2  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 0 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни