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

Тема в разделе "Общие вопросы по С и С++", создана пользователем Sergey_24, 11 июн 2007.

Статус темы:
Закрыта.
  1. Sergey_24

    Sergey_24 Гость

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

    Kmet Well-Known Member
    Java Team

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

    Sergey_24 Гость

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

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    не совсем понимаю в чем сложность, программирования потоков на с++
     
  5. Kmet

    Kmet Well-Known Member
    Java Team

    Регистрация:
    25 май 2006
    Сообщения:
    1.018
    Симпатии:
    1
    не совсем понимаю в чем сложность, программирования потоков на с++
     
  6. Sergey_24

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

Поделиться этой страницей