@ProCxx

Страница 653 из 2477
Surreal
09.03.2017
13:18:06
а мож хер с ним, сделаю класс , у него будут мемберы с этим указателем и метод дёргающий мембера, и прсото в сигнал скормлю указатель на этот метод
Только статические функции-члены можно приводить к обычным указателям на функции, нет? У не статической функции-члена "void fn(int)" будет тип "void (class*)(int)". Или я путаю чего?

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
читал недавно блог-пост про это, поискать или сами закостылите?

babysitter
09.03.2017
13:23:20
про бинд или про лямбы ?
http://www.cyberforum.ru/blogs/212894/blog4325.html

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

Tema
09.03.2017
13:25:36
Вы тут не на функции-члены указатели шатаете?
вообще хотелось бы по сигинту постопать треды, был заюзан signal.h

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

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

Square
09.03.2017
13:26:07
вообще хотелось бы по сигинту постопать треды, был заюзан signal.h
Да у меня часть переписки пропала - не понял чо за ботва сходу

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
почитал тут про std::bind а для чего обычно такую штуку юзают?
в с++14 лямбды полностью сделали бинд ненужным

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
в с++14 лямбды полностью сделали бинд ненужным
грубо говоря - он выведет новую лямбду, где часть аргументов связана?

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
ну как у меня, где требуют указатель на функцию с 1 аргументом а тебе хочется засунуть ту где 2
Если тебе позарез нужно инкапсулировать обработчик, можешь сделать это вот так: class Handler { public: void registerHandler(int signum) { instance = this; signal(signum, staticHandle); } private: static Handler* instance; static void staticHandle(int signum) { instance->handle(signum); } void handle(int signum) { // Handle it! } };

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

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

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

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

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

После этого registerHandler можно вызывать многократно.

Tema
09.03.2017
13:53:12
После этого registerHandler можно вызывать многократно.
undefined reference to `(anonymous namespace)::Handler::instance' build/obj/main.o: In function `staticHandle':

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
auto handler = new Handler; handler->registerHandler(...); handler->registerHandler(...);
main.cpp:199:36: error: qualified-id in declaration before ‘=’ token Handler* Handler::m_aniUpdater = aniUpdater.get();

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
Параметр лучше передать через конструктор.

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

Tema
09.03.2017
14:24:51
Что такое "aniUpdater.get()"?
std::unique_ptr<AniUpdater> aniUpdater;

Что такое "aniUpdater.get()"?
... private: static Handler* instance; static AniUpdater* m_aniUpdater; ...

починил

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
Но это уже оффтопик. Гуглить "signal man" и "sigaction man".
а как сделать переменное число указателей на объекты разного типа вместо m_aniUpdater

и у всех них вызывать по очереди терминейт и джоен

ну типа у меня много подсистем

и в разных програмах разные

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
Зачем вообще нужен питон?
С этим вопросом стоит попытать счастья во @fludpac или в pro.cxx.holywars

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

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

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

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

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

есть наносвг

Страница 653 из 2477