Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Антон219
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 71
#1

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

25.06.2014, 23:32. Просмотров 317. Ответов 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.06.2014, 23:32
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Что использовать вместо таймера для множества точек, жизнь которых - 5 секунд (C++):

Верно ли, что для любой пары точек из множества все оставшиеся точки лежат по одну сторону от прямой, проведённой через эту пару - C++
Даны действительные числа x1,....x15, y1,....y15, которые рассматриваются как координаты 15 точек на плоскости. Верно ли, что для каждой из...

Из множества точек на плоскости найти точки, образующие параллелограмм с наибольшим количеством точек внутри - C++
&quot;Даны N точек на плоскости. Найти среди них точки являющиеся вершинами фигуры, содержащей максимальное число заданных точек. Фигура -...

Рекурсия вместо трёх циклов for для генерирования точек внутри сферы - C++
нужно переделать код. Вместо 3 циклов использовать рекурсию. /* * File: main.c * Author: Admin * * Created on 29 сентября 2014...

Выбрать из точек множества три таких, чтобы в получившийся треугольник влезо наибольшее количество точек - C++
Помогите пожалуйста....Дана задача: Из заданного множества точек на плоскости выбрать 3 разные точки A,B,C так, чтобы внутри треугольника...

Изменить способ выделения памяти для массива (вместо new использовать malloc) - C++
#include &quot;stdafx.h&quot; #include &quot;stdlib.h&quot; struct str_Team{ char Komanda; int Ochki; int Gold; int Silver; int...

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

4
nmcf
5538 / 4848 / 1644
Регистрация: 14.04.2014
Сообщений: 19,670
26.06.2014, 07:59 #2
В строках 12-13 как ты без вектора обращаешься к P?
1
zss
Модератор
Эксперт С++
6532 / 6094 / 2007
Регистрация: 18.12.2011
Сообщений: 15,851
Завершенные тесты: 1
26.06.2014, 08:06 #3
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Идея правильная.
Таймера достаточно одного.
А в цикле Вы проходите по всем созданным объектам
и по каким-то признакам определяете, что с ними делать.
1
dzrkot
zzzZZZ...
523 / 353 / 54
Регистрация: 11.09.2013
Сообщений: 2,025
26.06.2014, 11:23 #4
ну я так же делаю - 1 таймер, в нём итерируем все счётчики, при создании объекта выставляем счетчик в 0, при достижении 5000 объект удаляем
1
Антон219
0 / 0 / 0
Регистрация: 09.06.2013
Сообщений: 71
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
26.06.2014, 17:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2014, 17:03
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru