Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
1

Что использовать вместо таймера для множества точек, жизнь которых - 5 секунд

25.06.2014, 23:32. Показов 1010. Ответов 4
Метки нет (Все метки)

Привет, народ, подскажите пожалуйста, как принято поступать в следующем случае:
Имеется много разных объектов, они умеют делать много вещей - двигаться, появляться и исчезать с определенной частотой и др. вещи, зависящие от таймера. Как такое реализовать?
Пример: каждый раз при нажатии кнопки на клавиатуре - в форме появляется точка. Каждая точка живет, допустим, 5 секунд, а затем исчезает. Не буду же я для каждой точки свой таймер создавать?! Это и невозможно, там ведь ограничено число таймеров. Интересен именно наиболее принятый способ, сам я могу предложить нечто такое:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SetTimer(hwnd, 1, 1000, NULL);
..........................................
switch(msg)
    {   
case WM_KEYDOWN:
        MyPoint* P = new MyPoint;
        MyVector.push_back(P);
        break;
case WM_TIMER:
        for (int i = 0; i < MyVector.size(); i++)
             {
                   P->counter += 1;
                   if(P->counter >= 5)
                   {
                         delete MyVector[i];
                         MyVector.erase(MyVector.begin() + i);
                   }
             }
        break;
Может и ошибся где, но суть, думаю передал. Так делают?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2014, 23:32
Ответы с готовыми решениями:

Какой массив использовать для хранения множества точек
В общем задача у меня такая: надо нарисовать персонажа из точек и прямых (скелет типа), с...

Что использовать вместо system, для Ubuntu?
Добрый вечер господа. Я передаю команды в консоль в среде windows словом system(&quot;...&quot;); ...

Что использовать вместо GetWindowRect для максимизированных окон?
Есть функция (многие из читающих этот раздел наверняка с ней знакомы) GetWindowRect, она возвращает...

Что можно использовать для верстки дизайна сайта вместо css?
Как написать сайт не используя css? Что можно использовать для верстки дизайна сайта вместо css?

4
7158 / 6133 / 2801
Регистрация: 14.04.2014
Сообщений: 26,455
26.06.2014, 07:59 2
В строках 12-13 как ты без вектора обращаешься к P?
1
Модератор
Эксперт С++
11480 / 9398 / 5649
Регистрация: 18.12.2011
Сообщений: 25,108
26.06.2014, 08:06 3
Лучший ответ Сообщение было отмечено Антон219 как решение

Решение

Идея правильная.
Таймера достаточно одного.
А в цикле Вы проходите по всем созданным объектам
и по каким-то признакам определяете, что с ними делать.
1
zzzZZZ...
527 / 358 / 94
Регистрация: 11.09.2013
Сообщений: 2,040
26.06.2014, 11:23 4
ну я так же делаю - 1 таймер, в нём итерируем все счётчики, при создании объекта выставляем счетчик в 0, при достижении 5000 объект удаляем
1
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 72
26.06.2014, 17:03  [ТС] 5
Спасибо! Мне ничего другого в голову не пришло, поэтому я подозревал, что так и должно быть))

nmcf, да, согласен - ошибся, я такие вещи порой только при компиляции обнаруживаю) тогда будет как-то так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SetTimer(hwnd, 1, 1000, NULL);
..........................................
switch(msg)
    {   
case WM_KEYDOWN:
        MyPoint* P = new MyPoint;
        MyVector.push_back(P);
        break;
case WM_TIMER:
        for (int i = 0; i < MyVector.size(); i++)
             {
                   MyVector[i]->counter += 1;
                   if(MyVector[i]->counter >= 5)
                   {
                         delete MyVector[i];
                         MyVector.erase(MyVector.begin() + i);
                   }
             }
        break;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.06.2014, 17:03

Из заданного множества точек на плоскости выбрать две различные точки так, что бы количества точек, лежащих по разные ст
Из заданного множества точек на плоскости выбрать две различные точки так, что бы количества точек,...

Что использовать вместо dataGridView для более воспринимаемого и сгруппированного вывода данных из БД
Создаю приложение. Ввод данных (пока на windows form, вводятся в textBox-ы - вводятся ФИО. адрес...

Определить радиус и центр такой окружности, проходящей хотя бы через три точки множества точек, что минимальна разность по модулю количества точек, ле
Помогите с программой Условие: На геометрической плоскости дано множество точек. Координаты точек...

Что можно использовать вместо функции itoa, и какие библиотеки для этих функций подключать?
вопрос такой что можно использовать вместо функции itoa , и какие библиотеки для этих функций...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru