boost :: ошибка сегментации потока - PullRequest
1 голос
/ 23 февраля 2012

У меня есть класс Runnable. В котором следующие функции я использую, чтобы начать новый поток:

      start()
      {
           status_ = RUNNING;
            mythread_ = boost::thread(boost::ref(*this)); // Line 2
      }

У меня есть класс Controller, полученный из Runnable. и я хочу создать поток для контроллера, используя функцию start ()

Итак, в функции запуска контроллера,

Я использую:

controller_->start()

для создания новой темы;

Но это в конечном итоге приводит к ошибке сегментации в строке 2.

Есть идеи, что могло пойти не так?

Ответы [ 2 ]

0 голосов
/ 23 февраля 2012

Адрес объекта доступен только из функции-члена как указатель this, и большинство случаев использования this неявны.

В качестве альтернативы, вы можете сделать функцию start(), friendкласса и прямой отправки ссылки на объект в ваш новый поток.

0 голосов
/ 23 февраля 2012

Я помню, что иногда не указание библиотеки потоков для компилятора приводило к segfault.Попробуйте добавить аргумент -pthread в компилятор, если вы используете unix.Похоже, что он больше не нужен в последних версиях linux / boost / gcc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...