• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Как использовать потоки или сигналы в С++ под Линукс

  • Автор темы Sergey_24
  • Дата начала
Статус
Закрыто для дальнейших ответов.
S

Sergey_24

Всем привет. Может кто-нибудь знает как можно в обработчик сигналов sa_handler(из структуры sigaction), присвоить функцию класса. Или в потоковую функцию pthread_create третьим аргументом вызывать функцию класса. A то уже 3 день ничего путного в инете найти не могу ...
 

Kmet

Well-known member
25.05.2006
904
8
BIT
0
в общем случае никак, в функцию член неявным образом передается указатель на класс (this), и следовательно мы получаем азлиные сигнатуры. передать можноуказатель на статическую функцию-член. вроде бы boost::function позволяет решать эту проблему, но не разбирался.
 
S

Sergey_24

в общем случае никак, в функцию член неявным образом передается указатель на класс (this), и следовательно мы получаем азлиные сигнатуры. передать можноуказатель на статическую функцию-член. вроде бы boost::function позволяет решать эту проблему, но не разбирался.

А можно что то ещё использовать вместо сигналов или потоков?? ... У меня "одна часть" программы рисует на экране, а другая "часть" ждёт нажатия кнопки(влево,вправо...) . Короче змейку я пишу ... И хотелось бы именно на С++ написать, а не на Си.
 
S

Sergey_24

не совсем понимаю в чем сложность, программирования потоков на с++

Ну в общем то разобрался я как можно реализовать программу с помощью потоков, но теперь возник такой вопрос:
Вот отрывок из кода:

Animal* snake= new Animal(9); // Создаю 9 экземпляров класса(9 штук звеньев змейки)
void* dir_ptr = &snake; // void* чтобы четвёртым аргументом в функцию pthread_create передать

Дальше создаю новый экземпляр, чтобы взять адрес экземпляра snake в функции потока(ведь надо же мне как то в потоке использовать 9 экземпляров созданного в начале программы класса)
Animal* tmp = ((Animal*)(&dir_ptr));

А далее, просто для отладки, пытаюсь в цикле вывести все данные на экран(т.е. поля всех 9 экземпляров класса)

tmp->print_list();

Только выводится немного не то. А точнее выводяться переменные ДЕСЯТИ экземпляров класса,вместо 9. Может знаешь в чём тут дело?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!