Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Таймер - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ C++ ]
Таймер как в ыавн
Оценка: -----

#1
Пользователь офлайн   mxINI 

  • Даун какой-то
  • Вставить ник
  • Раскрыть информацию
Иногда раздрожает в языках отсутствие удобного таймера, прямо как в сампе, хоть и проклянаю его решил написать такую штуку на плюсах. Держите, буду рад критике.
Класс [Показать]


Пример использования [Показать]

Сообщение отредактировал mxINI: 27 Август 2017 - 19:29

-2

#2
Пользователь офлайн   VVWVV 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
Во-первых, не кроссплатформенно из-за библиотеки Windows.h.
Во-вторых, это больше не плюсы, а си с классами, поскольку нынешний стандарт плюсов давно ушёл от этого.
0

#3
Пользователь офлайн   mxINI 

  • Даун какой-то
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияVVWVV (27 Август 2017 - 20:09) писал:

Во-первых, не кроссплатформенно из-за библиотеки Windows.h.
Во-вторых, это больше не плюсы, а си с классами, поскольку нынешний стандарт плюсов давно ушёл от этого.

Про win.h согласен, не стал долго искать решения. time.h предоставлял только время в секундах, а неплохо было бы иметь мс. А вот про современный стандарт прошу разъяснить, а то я далекий от этих вещей.
Позже: А хотя про первое не, можно же придумать что то с chrono :D Это тупанул

Сообщение отредактировал mxINI: 27 Август 2017 - 20:20

1

#4
Пользователь офлайн   makap 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Начнем с того, что метод timer_func не работает, да и видно, что при repeat = false работать не будет

Это будет правильно и логично:
    void timer_func()
    {
        int curr_time = GetTickCount();
        do
        {
            if (GetTickCount() - curr_time >= time)
            {
                f();
                if (!repeat) break;
                curr_time = GetTickCount();
            }
        }
        while (true);
    }



Далее, зачем перебрасывать ссылки в = и конструкторе копирования?
Нужно создавать новый объект, а не делать одинаковыми два таймера. Удалив 1, 2-ой теряется

Тому пример
//работает
Timer *t1 = new Timer(timer_exec1, 2000, true);
Timer *t2= new Timer(timer_exec2, 4000, true);
*t2=*t1;
//не работает
Timer *t1 = new Timer(timer_exec1, 2000, true);
Timer *t2= new Timer(timer_exec2, 4000, true);
*t2=*t1;
delete t1;



+ у тебя утечка памяти при =

Разбирайся дальше с указателями

Хотел критики, вот тебе критика

Сообщение отредактировал makap: 28 Август 2017 - 15:54

0

#5
Пользователь офлайн   mxINI 

  • Даун какой-то
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияmakap (28 Август 2017 - 15:52) писал:

Начнем с того, что метод timer_func не работает, да и видно, что при repeat = false работать не будет

Это будет правильно и логично:
    void timer_func()
    {
        int curr_time = GetTickCount();
        do
        {
            if (GetTickCount() - curr_time >= time)
            {
                f();
                if (!repeat) break;
                curr_time = GetTickCount();
            }
        }
        while (true);
    }



Далее, зачем перебрасывать ссылки в = и конструкторе копирования?
Нужно создавать новый объект, а не делать одинаковыми два таймера. Удалив 1, 2-ой теряется

Тому пример
//работает
Timer *t1 = new Timer(timer_exec1, 2000, true);
Timer *t2= new Timer(timer_exec2, 4000, true);
*t2=*t1;
//не работает
Timer *t1 = new Timer(timer_exec1, 2000, true);
Timer *t2= new Timer(timer_exec2, 4000, true);
*t2=*t1;
delete t1;



+ у тебя утечка памяти при =

Разбирайся дальше с указателями

Хотел критики, вот тебе критика

Окей, учту, но все же при false всё спокойно работает, это ж do-while а не while.

Сообщение отредактировал mxINI: 28 Август 2017 - 18:26

0

#6
Пользователь офлайн   mxINI 

  • Даун какой-то
  • Вставить ник
  • Раскрыть информацию
Немного поправил, подлизал. Добавил start и pause и ожидаю очередное ведро говна )
Скрытый текст [Показать]

0

#7
Пользователь офлайн   pla.belov@gmail.com 

  • Пользователь
  • Вставить ник
  • Раскрыть информацию
так это работает ?
0

#8
Пользователь офлайн   PolitoDX 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
А не проще просто взять поток и первой строкой в функции просто накатить std::sleep_for?
0

#9
Пользователь офлайн   RichardBanero 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Чего нет скринов?!
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей