• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы 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. Может знаешь в чём тут дело?
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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