Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задержка действия с передачей управления далее 
V
    Опции темы
DelphianOracle
Дата 25.6.2007, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 20.5.2007

Репутация: нет
Всего: нет



Появилась такая проблема - надо чтобы процедура вызывалась, скажем, через секунду. Но вся проблема в том, что в это время программа должна не стоять, а двигаться дальше. Иными словами прога оставляет вузов процедуры на потом, а сама спокойно работает дальше.
Подскажите плз, как это лучше осуществить.
PM MAIL   Вверх
kapbepucm
Дата 25.6.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Может таймер использовать?


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Akina
Дата 25.6.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Не может, а именно таймер.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DelphianOracle
Дата 25.6.2007, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 20.5.2007

Репутация: нет
Всего: нет



А без таймера можно? А то делать таймер для довольно редкой операции... помойму плохо
PM MAIL   Вверх
Naghual
Дата 25.6.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1893
Регистрация: 15.5.2004
Где: Украина, Днепр

Репутация: 26
Всего: 49



DelphianOracle, А что за операция такая????


--------------------
Я желаю всем Счастья!
PM ICQ Skype   Вверх
Tectoder
Дата 25.6.2007, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: нет
Всего: 8



В программировании встречаются ситуации, когд таймер нежелателен. Тогда применяется функция MsgWaitForMultypleObejctsEx. В частности, с помощью этой функции можно ждать определенный период времени или оконного сообщения.
Если у тебя именной такой случай - ищи описание и разбирайся. Если лень разбираться, значит это не тот случай, и тогда юзай таймеры.
PM   Вверх
Akina
Дата 25.6.2007, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



MsgWaitForMultipleObjectsEx хоть и не потребляет процессор, но приостанавливает исполнение кода... а у него
Цитата(DelphianOracle @  25.6.2007,  14:34 Найти цитируемый пост)
в это время программа должна не стоять, а двигаться дальше


DelphianOracle, уточните задачу. Особенно в части: куда должно вернуться управление после наступления "часа икс", прерывания основного кода и выполнения отложенного.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Tectoder
Дата 25.6.2007, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: нет
Всего: 8



Цитата(Akina @  25.6.2007,  22:28 Найти цитируемый пост)
MsgWaitForMultipleObjectsEx хоть и не потребляет процессор, но приостанавливает исполнение кода... а у него
И тем не менее. В ней ожидание обрывается(при определенных параметрах) по пришествии сообщения. Потом его можно обработать. Так что программа будет жить ;)
PM   Вверх
Akina
Дата 26.6.2007, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(DelphianOracle @  25.6.2007,  18:21 Найти цитируемый пост)
делать таймер для довольно редкой операции... помойму плохо 

Почему плохо? ну валяется он себе в состоянии disabled... а когда понадобился - включается... а как сработал - снова выключается:
Код

' ... работает программа
Timer1.Interval = 1000 ' скажем, через секунду надо сработать
Timer1.Enabled = True ' Начался отсчет
' ... работает дальше

private sub timer1_timer
Timer1.Enabled = False ' чтобы второй раз не сработало
' ... делаем чего надо по времени
end sub

У меня есть куча программ, где это используется. В некоторых по 3-4 таймера - потому как подобные отсчеты могут идти параллельно...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DelphianOracle
Дата 26.6.2007, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 20.5.2007

Репутация: нет
Всего: нет



Ладно, таймер так таймер...
А задача примерно такова:
В простой аркаде победа наступает после уничтожении всех врагов, => проверка осуществляется при попадании снаряда. А мне желательно, чтобы до вызова процедуры "победа" главный игровой цикл закончился (а то будет много потенциально опасных мест).

Akina, твой пример ясен, до этого я и сам додумался, но я думал что можно лучше.
PM MAIL   Вверх
kapbepucm
Дата 26.6.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



В данном случае подошло бы, если бы процедура "победа" ждала конца главного игрового цикла например с помощью WaitForMultipleObjects (как уже предлагал Tectoder); ведь хрен знает, какой интервал в таимере устанавливать- время до окончания главного цикла. А что мешает установить проверку "убиты ли все враги" в конце главного игрового цикла, ведь он сам себя завершит и передаст управление процедуре "победа" без особых проблем?

Это сообщение отредактировал(а) kapbepucm - 26.6.2007, 15:11


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
DelphianOracle
Дата 26.6.2007, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 20.5.2007

Репутация: нет
Всего: нет



Цитата(kapbepucm @  26.6.2007,  14:56 Найти цитируемый пост)
хрен знает, какой интервал в таимере устанавливать- время до окончания главного цикла

Это как раз понятно, т.к. больше циклов не будет (general_game_timer.enabled=false).
Проверку в главном игровом цикле я не хочу - это ооочень частая операция, и её надо оптимизировать как только можно smile
PM MAIL   Вверх
kapbepucm
Дата 26.6.2007, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Цитата
хрен знает, какой интервал в таимере устанавливать

Я имел в виду ситуацию, где главный цикл ещё не закончился и надо подождать его окончания; а не то, будет ли он вызываться заново или нет. Ну, типа, WaitForMultipleObjects в процедуре "победа" будет ждать два EVENT'а: признак победы и конец главного цикла. Год назад подобную хрень делал smile

Это сообщение отредактировал(а) kapbepucm - 26.6.2007, 16:34


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Tectoder
Дата 26.6.2007, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 202
Регистрация: 13.3.2007

Репутация: нет
Всего: 8



Замечу, что я рекомендовал не WaitForMultipleObjects, а MsgWaitForMultypleObejctsEx
PM   Вверх
kapbepucm
Дата 26.6.2007, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 993
Регистрация: 14.6.2007
Где: Латвия

Репутация: нет
Всего: 12



Tectoder, я упоминал слова "например" и "как" имея ввиду подобие деиствий- я не упоминал "именно так, как предлагал Tectoder". Тоже хочу заметить... В дальнейшем постараюсь более конкретнее ссылаться. Данную несостыковку я замечал.

Это сообщение отредактировал(а) kapbepucm - 26.6.2007, 19:10


--------------------
(С) kapbepucm
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0554 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.