Можете ли вы указать порядок завершения потока, то есть зависимости потока? - PullRequest
0 голосов
/ 07 февраля 2011

Я делаю видеоигру, и у меня есть основной поток, который заботится о графике, и отдельный рабочий поток, который заботится о сети (синхронные сокеты UDP).

Проблема в том, что когдаЯ закрываю игру, я получаю ошибку «Нарушение прав доступа», и отладчик указывает мне на одну из нескольких строк кода, каждая из которых ссылается на объект, который, как я считаю, уже уничтожен в другом потоке..

Поскольку я использую асинхронные потоки, мой инстинкт состоит в том, что основной поток почти всегда сначала убивается, когда вызывается вызов recv (), а затем, когда возвращается recv (), все указатели, которые он теперь держит,фальшивая и visual studio начинает выдавать ошибки.

Кстати, я использую потоки Boost, Visual Studio 2008 и C ++

1 Ответ

3 голосов
/ 07 февраля 2011

Перед очисткой общих ресурсов основной поток должен дождаться завершения сетевого потока.В Boost функция boost::thread::join() должна помочь.

Обязательно разберитесь также и с boost::thread_interrupted!ответ; у меня нет опыта работы с Boost, в частности.)

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