![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| decembrist |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Народ, подскажите, кто знает!
Я работаю с функцией
где в Draw у меня основной код, перерисовывается по auxMainLoop(Draw); в цикле. А мне нужно, работать через таймер. Как это сделать??? Я вызвал в main SetTimer(NULL, 0, 40, (TIMERPROC) MyTimerProc); где в MyTimerProc код идентичный ф-ции Draw:
|
||||
|
|||||
| Ni@m |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 189 Регистрация: 11.3.2004 Где: почти Киев Репутация: 0 Всего: 6 |
По спецификации
// это вроде в апи UINT SetTimer( UINT nIDEvent, UINT nElapse, void ( CALLBACK* lpfnTimer )(HWND, UINT, UINT, DWORD) = NULL ) throw(); // a вот это в SDK UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc ); Попробуй апишную --------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше. |
|||
|
||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Спасибо, сейчас попробую
|
|||
|
||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Ni@m в апи не получится, мне тогда код программы нужно будет переписывать под апи, это дофига работы. Мне в SDK нужно
|
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Может быть такое, что auxMainLoop ещё что-то делает, кроме вызова функции?
Это сообщение отредактировал(а) chipset - 1.3.2005, 12:12 --------------------
|
|||
|
||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Нет, у меня в main только одна строка auxMainLoop(Draw)
Добавлено @ 12:41 Дело в том, что в Draw по инкременту перерисовывается некий объект, скорость перерисовки зависит от приращения. А я хочу чтобы он перерисовывался по таймеру |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
а можно поинтересоваться, что это за среда разработки и почему программу придется переписывать под API? Добавлено @ 12:58 а точнее, что мешает в первой строке программы написать #include <windows.h> и потом пользоваться API-шными функциями? -------------------- qqq |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
здесь происходит запуск таймера, а потом почти сразу выход из программы вообще, таймер просто не успевает сработать нужно зациклить программу (например while(true)) -------------------- qqq |
|||
|
||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Блин, совсем запутался!
Еще раз
где в MyTimerProc() у меня основной код который должен повторяться через определенный интервал времени. Почему он не успевает сработать? Пробовал maxim1000 while (true) { SetTimer(NULL, 0, 40, (TIMERPROC) MyTimerProc); } тогда происходит запуск в цикле таймера, а не процедуры MyTimerProc? |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
не так
SetTimer(...) всего лишь запускает процесс периодических вызовов через указанное время процедура будет вызвана единственное, что нужно - чтобы приложение в этот момент еще не завершилось поэтому нужно сделать:
-------------------- qqq |
|||
|
||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Спасибо
Добавлено @ 13:07 Попробовал, последняя строка while(true); зациклила прогу, а таймер не вызывает ф-цию MyTimerProc? |
|||
|
||||
| maxim1000 |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
хм...непонятно...
с одной стороны в MSDN говорится, что необходимо наличие окна для обработки сообщения от таймера хотя бы для того, чтобы автоматически вызвать функцию таймера
с другой стороны там же (только выше) говорится, что можно обойтись без окна вообще:
Добавлено @ 13:24 или,может,они полагаются на то, что Рабочий стол (0-й handle указывает на него, насколько мне известно) сам обработает это сообщение и вызовет функцию...как-то не верится... Добавлено @ 13:25 ладно, я все равно обычно пользуюсь ожидаемыми таймерами: http://msdn.microsoft.com/library/default....mer_objects.asp -------------------- qqq |
||||
|
|||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Я попробовал так
auxMainLoop(Draw); работает как обработчик сообщения WM_PAINT то есть вызывает перерисовку созданного мной изображения. Теперь идет обращение к MyTimerProc(). Но у меня другой глюк всплыл. На SetTimer я устанавливаю разные интервалы временип, а у меня одна скорость |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
а-а-а-а... как же до меня не дошло сразу...
все предельно просто: надо просто вспомнить, что сообщения приходят не к окнам, а к потокам, которые их создали, а те уже (если захотят, конечно) рассылают их своим окнам а тут ничего даже рассылать не надо:
Добавлено @ 13:48 ну вот...а тут уже ответили... http://forum.vingrad.ru/index.php?showtopic=44017&hl= вот что бывает, когда в двух темах идет обсуждение практически одного вопроса... Это сообщение отредактировал(а) maxim1000 - 2.3.2005, 13:49 -------------------- qqq |
|||
|
||||
| decembrist |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 1.4.2004 Репутация: нет Всего: нет |
Спасибо,
maxim1000 за помощь. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |