Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Нужен таймер  (Прочитано 441 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн gunsoy

  • Автор темы
  • Участник
  • *
  • Сообщений: 178
    • Просмотр профиля
Нужен таймер
« : 28 Май 2014, 19:33:28 »
Здравствуйте.

Мне на сервере нужен посекундный таймер на с++, который бы каждые 10 секунд, запускал нужную функцию. Мне бы простейший пример работы с таймером увидеть, никогда с ними не работал, в интернете только описания функций или очень большие примеры нахожу. Поделитесь ссылкой пожалуйста.

Спасибо за внимание.

Оффлайн Chibiko

  • Активист
  • *
  • Сообщений: 295
  • человекобяка
    • Просмотр профиля
    • Велопоходики
Re: Нужен таймер
« Ответ #1 : 28 Май 2014, 19:45:26 »
man cronлучший таймер!

Оффлайн gunsoy

  • Автор темы
  • Участник
  • *
  • Сообщений: 178
    • Просмотр профиля
Re: Нужен таймер
« Ответ #2 : 28 Май 2014, 19:52:29 »
По ходу нашёл то что нужно. alarm(), сейчас проверю. ППЦ столько таймеров понаделали.

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 11887
  • Xubuntu 18.04 (64bit)
    • Просмотр профиля
Re: Нужен таймер
« Ответ #3 : 28 Май 2014, 21:23:17 »
Я в питоне пользовал glib-овский таймер.

GLib.timeout_add_seconds(<sec>, <eventHandler>)
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн Peter_I

  • Старожил
  • *
  • Сообщений: 1785
    • Просмотр профиля
Re: Нужен таймер
« Ответ #4 : 28 Май 2014, 23:25:27 »
В C/C++ можно использовать таймеры, предоставляемые системой.
man setitimer.
Пётр.

Оффлайн gunsoy

  • Автор темы
  • Участник
  • *
  • Сообщений: 178
    • Просмотр профиля
Re: Нужен таймер
« Ответ #5 : 29 Май 2014, 17:22:41 »
Проверил с использованием обычных функций

(Нажмите, чтобы показать/скрыть)

Работает так как мне нужно подумал я. Запихнул этот код в свой класс, только вот функцию signal_handler сделал методом класса. При попытке компиляции выдаёт

/home/vadim/server/tcpserver44/WorkerThread.cpp|36|error: cannot convert ‘WorkerThread::signal_handler’ from type ‘void (WorkerThread::)(int)’ to type ‘__sighandler_t {aka void (*)(int)}’|
Как я понял должна быть обычная функция, а не метод класса. И нет возможности передать указатель на класс в качестве аргумента signal_handler.

Есть ли замена функции signal(SIGALRM, signal_handler); с возможностью вызова метода класса или с возможностью передать указатель на класс в качестве аргумента?

Оффлайн gunsoy

  • Автор темы
  • Участник
  • *
  • Сообщений: 178
    • Просмотр профиля
Re: Нужен таймер
« Ответ #6 : 29 Май 2014, 17:52:47 »
Вы не поняли, код который я указал был лишь пробным, но рабочим, далее я сделал примерно так

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include <signal.h>
#include <sys/time.h>

void WorkerThread::signal_handler(int sigma)
{
    std::cout << "\nTrueAlarm";
    alarm(5);
}

int main()
{
    alarm(5);
    signal(SIGALRM, signal_handler);
    while(true)
    {
    }
    return 0;
}

Функцию signal_handler я сделал методом класса и получил ошибку компиляции

Пользователь решил продолжить мысль 29 Май 2014, 21:24:20:
ППЦ не могу найти подходящий таймер, легче уж самостоятельно написать. Давно бы уж написал, если бы знал что так туго с ними=(
« Последнее редактирование: 29 Май 2014, 21:24:20 от gunsoy »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Нужен таймер
« Ответ #7 : 30 Май 2014, 07:26:40 »
Правильный ответ: воспользуйся select'ом. Если тебе не нужны дескрипторы ввода вывода то их можно не задавть

 

Страница сгенерирована за 0.056 секунд. Запросов: 25.