АПИ таймеры

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

АПИ таймеры

Сообщение seelts » 11.10.2005 (Вт) 1:41

по ходу написания програмы столкнулся с необходимостью использования таймеров и естественно кинул на форму стандартный контрол. и в который раз я заметил что при малых значениях интервала таймер не успевает обрабатывать каждый "тик". т.е. если я ставлю интервал скажем 5, то работает всё также как и с интервалом 50: то что должно перемещаться не перемещается ни плавнее ни быстрее. решил использовать АПИ функции: CreateTimerQueue, CreateTimerQueueTimer , DeleteTimerQueue, DeleteTimerQueueTimer и наткнулся на грабли: у меня в программе есть класс в виде АктивХ ДЛЛ (как же они мне надоели), и всё бы ничего , но если я использую экземпляр этого класса в процедуре обработки таймера, то не просто появляется ошибка, а вылетает весь Васик!!! а если использовать SetTimer и KillTimer то у меня не получается использовать 2 и более таймеров, и к тому же этот таймер такой же тормознутый как и Басиковский контрол.
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Сообщение d3drm » 11.10.2005 (Вт) 2:40

а в чом вопрос?
ХЎ

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.10.2005 (Вт) 8:02

seelts, в Винде есть Главный Таймер с частотой около 55мс, и все функции типа SetTimer и CreateTimerQueueTimer, равно как и Бейсиковский таймер - всего лишь интерфейсы к нему. Т.е. точность у них у всех одинаковая.

Для большей точности юзай QueryPerformanceCounter.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.10.2005 (Вт) 9:00

Вообще-то, SetTimer/KillTimer позволяет использовать сколько угодно таймеров (вернее, до 16 на одно приложение).
Lasciate ogni speranza, voi ch'entrate.

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

Сообщение seelts » 11.10.2005 (Вт) 23:50

по поводу setTimer'а: делал setTimer me.hWnd, 0 , .... - вроде создаётся таймер, потом setTimer me.hWnd, 1 , .... - по идее должен создаться другой таймер (как я понял из описания второй параметр это идентификатор таймера), но процедура выполняется только та которая указана в первом таймере. этот таймер мне всё равно не нравится, но мне нужен таймер через апи (не через контрол на форму) и меня во всём устраивает CreatTimerQueue... но с классами работать он не хочет...
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 11.10.2005 (Вт) 23:53

d3drm писал(а):а в чом вопрос?
Изображение

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

Сообщение seelts » 12.10.2005 (Ср) 0:16

вопрос как сделать чтоб в процедуре обработки таймера созданного с помощью CreateTimerQueue, CreateTimerQueueTimer , DeleteTimerQueue, DeleteTimerQueueTimer можно было работать с экземплярами моего класса (из АктивХ ДЛЛ :roll: )
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.10.2005 (Ср) 0:31

Найти гуглом/по форуму пример многонитёвого приложения, и воспользоваться ;-)

Лично я советую пример от Мэтта Курланда, который был в VBPJ June 1999 (см. архив на их сайте). Код инициализации нити, который я использовал в своём хуке, взят из этой статьи.
Изображение

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: АПИ таймеры

Сообщение codemaster » 15.10.2005 (Сб) 12:38

seelts писал(а):по ходу написания програмы столкнулся с необходимостью использования таймеров .


посмотри этот пример
http://www.vbaccelerator.com/home/VB/Co ... rticle.asp

но сдается ты допустил ошибку на этапе "проектировния"
что ты хочеш сделать при помощи таймеров?
//<-
Mit freundlichen Grüßen
//->

seelts
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 21.11.2002 (Чт) 11:24
Откуда: Russia

Re: АПИ таймеры

Сообщение seelts » 15.10.2005 (Сб) 23:39

codemaster писал(а):что ты хочеш сделать при помощи таймеров?
я хочу чтобы с определённой периодичностью вызывалась нужная мне процедура
если создать алгоритм, которым сможет пользоваться даже дурак, то только дурак и будет им пользоваться

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: АПИ таймеры

Сообщение codemaster » 17.10.2005 (Пн) 11:17

seelts писал(а):
codemaster писал(а):что ты хочеш сделать при помощи таймеров?
я хочу чтобы с определённой периодичностью вызывалась нужная мне процедура


Если ты решил реадизовать это через таймеры то
см. ссылку выше
правда еще стоит посмотреть "время исполнения процедуры" и
"интервалы" таймера (если они прекрываются ..... ).

заодно посмотри
http://www.elitevb.com/content/01,0008,01/
//<-
Mit freundlichen Grüßen
//->


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 124

    TopList