Заполнитель для заголовка C ++ 0x <thread>в MSVC ++ 2010 - PullRequest
3 голосов
/ 26 сентября 2010

Я уже использую некоторые новые функции из C ++ 0x в Visual C ++ 2010, такие как регулярные выражения или лямбда-функции. Но есть одна главная особенность, которая отсутствует: заголовок <thread> .

Знаете ли вы какой-либо код, который может заменить ?

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

Не думаю, что было бы слишком сложно кодировать (хотя я могу ошибаться), но я недостаточно знаю API Win32, чтобы сделать это.

Ответы [ 3 ]

5 голосов
/ 26 сентября 2010

Я использовал boost::thread в чувствительном к производительности производственном коде, и он намного сложнее и производительнее, чем все, что мы могли бы построить за разумное количество времени.В частности, замок читателя-писателя - вещь прекрасная.У вас есть дополнительное преимущество в том, что человек, который написал код и книгу , активен при переполнении стека, если вам нужна помощь.Вы можете улучшить время компиляции, разумно используя предварительно скомпилированные заголовки Visual Studio , чтобы избежать повторной загрузки заголовков Boost.

4 голосов
/ 26 сентября 2010

Я думаю, что boost::thread - ваша лучшая ставка. Он тщательно протестирован, и std::thread основан на нем. Вы просто должны помнить о различных областях и стараться справляться с ними как можно лучше.

Как указано здесь : <ч /> Дизайн этой темы - это эволюция от boost :: thread. Намерение состоит в том, чтобы повторно использовать как можно больше опыта boost :: thread, сохраняя его и изменяя минимум, необходимый для реагирования на известные ограничения в этой области.

  • семантика буста, не копируемая, одноручная, сопоставляется с одним потоком, сохраняется. Но эта нить является подвижной, что позволяет возвращать нить из заводских функций и помещать в контейнеры.
  • Это предложение добавляет отмену в boost :: thread, что является существенным осложнением. Это изменение оказывает большое влияние не только на поток, но и на остальную часть библиотеки потоков C ++. Считается, что это большое изменение оправдано из-за выгоды.
    • Деструктор потока должен теперь вызывать отмену перед отсоединением, чтобы избежать случайной утечки дочерних потоков при отмене родительских потоков.
    • Теперь требуется явный элемент отсоединения, чтобы разрешить отсоединение без отмены.
  • Понятия дескриптора потока и идентификатора потока были разделены на два класса (они являются одним и тем же классом в boost :: thread). Это облегчает манипулирование и хранение идентификаторов потоков.
  • Добавлена ​​возможность создания идентификатора потока, который гарантированно сравнивается с равным ни одному другому присоединяемому потоку (Boost :: thread не имеет этого). Это удобно для кода, который хочет знать, выполняется ли он тем же потоком, что и предыдущий вызов (рекурсивные мьютексы являются конкретным примером).
  • Существует «задняя дверь», позволяющая получить дескриптор собственного потока, чтобы клиенты могли манипулировать потоками с помощью базовой ОС, если это необходимо.
0 голосов
/ 26 сентября 2010

Вы можете использовать функции потока win32.Они довольно просты в использовании и требуют лишь нескольких вызовов функций для начала работы.Быстрый поиск в Google должен решить все ваши проблемы.

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