Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Антон219
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 68
25.06.2014, 23:32     Что использовать вместо таймера для множества точек, жизнь которых - 5 секунд #1
Привет, народ, подскажите пожалуйста, как принято поступать в следующем случае:
Имеется много разных объектов, они умеют делать много вещей - двигаться, появляться и исчезать с определенной частотой и др. вещи, зависящие от таймера. Как такое реализовать?
Пример: каждый раз при нажатии кнопки на клавиатуре - в форме появляется точка. Каждая точка живет, допустим, 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;
Может и ошибся где, но суть, думаю передал. Так делают?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2014, 23:32     Что использовать вместо таймера для множества точек, жизнь которых - 5 секунд
Посмотрите здесь:

C++ Определить 3 точки, являющиеся вершинами треугольника, для которых разность точек вне е го и внутри является минимальной.
Верно ли, что для любой пары точек из множества все оставшиеся точки лежат по одну сторону от прямой, проведённой через эту пару C++
C++ Что лучше использовать для низкоуровневого программирования?
C++ Задано множество точек в трехмерном пространстве. Найти минимум радиусов шаров с центрами в этих точках, содержащих ровно n точек этого множества
C++ Изменить способ выделения памяти для массива (вместо new использовать malloc)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4297 / 3718 / 1251
Регистрация: 14.04.2014
Сообщений: 14,540
26.06.2014, 07:59     Что использовать вместо таймера для множества точек, жизнь которых - 5 секунд #2
В строках 12-13 как ты без вектора обращаешься к P?
zss
Модератор
Эксперт С++
 Аватар для zss
5944 / 5549 / 1783
Регистрация: 18.12.2011
Сообщений: 14,175
Завершенные тесты: 1
26.06.2014, 08:06     Что использовать вместо таймера для множества точек, жизнь которых - 5 секунд #3
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Идея правильная.
Таймера достаточно одного.
А в цикле Вы проходите по всем созданным объектам
и по каким-то признакам определяете, что с ними делать.
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
26.06.2014, 11:23     Что использовать вместо таймера для множества точек, жизнь которых - 5 секунд #4
ну я так же делаю - 1 таймер, в нём итерируем все счётчики, при создании объекта выставляем счетчик в 0, при достижении 5000 объект удаляем
Антон219
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 68
26.06.2014, 17:03  [ТС]     Что использовать вместо таймера для множества точек, жизнь которых - 5 секунд #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;
Yandex
Объявления
26.06.2014, 17:03     Что использовать вместо таймера для множества точек, жизнь которых - 5 секунд
Ответ Создать тему
Опции темы

Текущее время: 15:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru