
Surreal
09.03.2017
13:18:06

Tema
09.03.2017
13:18:47
я должен попробовать

Alex Фэils?︙
09.03.2017
13:21:05

Google

Tema
09.03.2017
13:22:08
джва аргумента в один

Alex Фэils?︙
09.03.2017
13:22:21
Думаю, да

babysitter
09.03.2017
13:22:34
читал недавно блог-пост про это, поискать или сами закостылите?

Tema
09.03.2017
13:23:04

babysitter
09.03.2017
13:23:20

Tema
09.03.2017
13:23:38

Square
09.03.2017
13:23:56
Вы тут не на функции-члены указатели шатаете?

Tema
09.03.2017
13:25:36

Square
09.03.2017
13:25:37
А. Догрузилась телега

Tema
09.03.2017
13:25:51
но он принимает на сигнал обработчик принимающий тока int

Square
09.03.2017
13:26:07

Tema
09.03.2017
13:26:32

Google

Square
09.03.2017
13:26:53
Оно быстрее qt'шных сигналов
Было по крайней мере до 5й версии

Tema
09.03.2017
13:27:50
но я то пр осигналы от ОС

Matway
09.03.2017
13:28:09
Указатель на не-статический мембер класса имеет тип
result (/*calling convention specifier*/ ClassName::* )(parameters...)
Это нельзя привести к обычному указателю на функцию.

Tema
09.03.2017
13:28:14
void (*signal(int sig, void (*func)(int)))(int);
void (*func)(int)
вот так нужно отдать хендлер сигнала

Sergey
09.03.2017
13:28:53
почитал тут про std::bind
а для чего обычно такую штуку юзают?

Tema
09.03.2017
13:28:57
при том что в int будет код сигнала вроде

Matway
09.03.2017
13:29:04
В твоём случае нужно где-то получить функцию, которая будет получать только один параметр - int. Это либо статический мембер какого-то класса (что исключает bind и lambda), либо свободная функция.

Sergey
09.03.2017
13:29:05
частичную подстановку аргументов. где это может быть полезно

Surreal
09.03.2017
13:30:09
Можно сложить объекты в класс, сделать friend функцию, которая принимает int. Так должно работать, наверное.

Matway
09.03.2017
13:31:06
Эта функция должна как-то увидеть инстанс класса. Он может быть только записан в какую-то статическую переменную. Вне или внутри функции.

babysitter
09.03.2017
13:31:39

Tema
09.03.2017
13:31:44
сделаю класс со статик методом который юзает статик мемберы-указатели на треад хендлеры

Matway
09.03.2017
13:32:17
"The effects of signal() in a multithreaded process are unspecified"

Tema
09.03.2017
13:32:32
я же могу менят ьстатик мембер-указатели-натреад-хендлер

Sergey
09.03.2017
13:32:35

Google

Sergey
09.03.2017
13:33:03
ну норм. а зачем в принципе может понадобиться частичная подстановка
юзкейс какой-нибудь

zk
09.03.2017
13:33:40
обертка над API например

Sergey
09.03.2017
13:33:43
я понимаю, что функциональщина так и пишется. но на плюсах

Tema
09.03.2017
13:33:58
юзкейс какой-нибудь
ну как у меня, где требуют указатель на функцию с 1 аргументом а тебе хочется засунуть ту где 2

babysitter
09.03.2017
13:34:19

Surreal
09.03.2017
13:34:57
Мне в голову только синглтон с сеттером и геттером на пул объектов приходит. Некрасиво, правда.

Matway
09.03.2017
13:43:06
Ты должен гарантировать, что registerHandler вызовется единожды. От статичности никуда не уйти.

Tema
09.03.2017
13:44:59

Matway
09.03.2017
13:49:18
Разумеется, после такого инстанс Handler должен жить вечно.
Также рекомендую использовать sigaction, а не signal.

Tema
09.03.2017
13:50:00
ну там сигинт сигкил сигтерм

Matway
09.03.2017
13:50:24
Нет, совсем не обязательно.

Tema
09.03.2017
13:50:45

Matway
09.03.2017
13:50:45
Можно сделать instance = this в конструкторе Handler::Handler().
После этого registerHandler можно вызывать многократно.

Tema
09.03.2017
13:53:12

Denis
09.03.2017
13:53:21
еще и ассерт поставить в кторе с проверкой что инстанс нулевой

Google

Andrei
09.03.2017
13:53:51
За определением класса.
Handler* Handler::instance = nullptr; напиши после определния класса.
В cpp-шнике

Matway
09.03.2017
13:55:54
Ага. Насчёт assert правильная мысль.
Недавно, кстати, обсуждали использование new/delete в коде. Так вот - это редкий случай, когда можно использовать голый new. Мало того, намеренно никогда не вызывать delete!
auto handler = new Handler;
handler->registerHandler(...);
handler->registerHandler(...);

Tema
09.03.2017
14:21:47

Admin
ERROR: S client not available

Tema
09.03.2017
14:21:59
auto handler = new Handler();
Handler* Handler::m_aniUpdater = aniUpdater.get();
handler->registerHandler(SIGINT);
handler->registerHandler(SIGTERM);

Matway
09.03.2017
14:22:18
Параметр лучше передать через конструктор.

Tema
09.03.2017
14:23:35

Matway
09.03.2017
14:23:47
Что такое "aniUpdater.get()"?

Tema
09.03.2017
14:24:51
починил

Matway
09.03.2017
14:32:29
Как-то
http://ideone.com/QngGQl
так должно получиться.

Tema
09.03.2017
14:34:36
работает
void handle(int signum)
{
PINFO("infoLog") << "[exit] ";
PINFO("infoLog") << m_aniUpdater;
if(nullptr != m_aniUpdater)
{
m_aniUpdater->terminate();
m_aniUpdater->join();
}
qApp->quit();
// Handle it!
}

Google

Tema
09.03.2017
14:42:39
про
sigaction
я не понял

Matway
09.03.2017
14:48:37
sigaction лучше портируется и предоставляет больше контроля.
Но это уже оффтопик. Гуглить "signal man" и "sigaction man".

Tema
09.03.2017
14:50:35
и у всех них вызывать по очереди терминейт и джоен
ну типа у меня много подсистем
и в разных програмах разные

Matway
09.03.2017
14:52:10
Через inheritance. Завести интерфейс, у которого есть эти методы. В Handler завести
std::vector<std::unique_ptr<SubsystemHandler>> subsystems;

Tema
09.03.2017
14:52:25
а окей
вынести в либу чтоли этот сигхендлер

Salavat
09.03.2017
16:19:33
Зачем вообще нужен питон?

Sergey
09.03.2017
16:22:38
для написания более-менее сложных, переносимых скриптов. по пакетной обработке данных, по настройке проекта, по генерации неких данных

Andrei
09.03.2017
16:32:34

zk
09.03.2017
16:37:11
Зачем вообще нужен питон?
Где-то я уже писал что существуют особи считающие что софт работающий быстро унижает пользователя; как бы намекая на тупость того самого пользователя,

Виталий
09.03.2017
17:25:03
Есть для си варианты работы с svg кроме imagemagick? Парсить не хочется. А хочется максимум компактно

Mikhail
09.03.2017
17:59:23

Виталий
09.03.2017
18:00:58
Qt
Тянуть целый кьют ради конвертации нескольких файлов. Жирно ...

Mikhail
09.03.2017
18:01:26
Ну кроме imagemagick и qt я других вариантов не знаю

Denis
09.03.2017
18:51:02
кьют не самая лучшая идея для свг, там очень ограниченный набор
есть наносвг