boost :: mutex поддерживает try_lock_for в Visual Studio, но не в Xcode

0

Я использую Xcode 5.0 и увеличиваю 1.54. Следующий код компилируется с использованием Visual Studio 2008 Sp1, но не компилируется в Xcode:

    template <class Rep, class Period>
bool try_lock_for(const boost::chrono::duration<Rep, Period> &_rel_time)
{
    return m_mutex.try_lock_for(_rel_time);
}

Я получаю сообщение об ошибке "Нет члена с именем" try_lock_until "в" boost :: mutex "в Xcode.

Я включаю boost/mutex.hpp и boost/thread.hpp. Проект Xcode настроен на использование Apple LLVM 5.0 и диалогов GNU99 C++. Я получаю аналогичную ошибку компиляции, когда я использую "try_lock_until (...)".

Похоже, что boost :: mutex определяется по-разному на двух платформах. В Windows код выглядит следующим образом:

namespace detail
{
    typedef ::boost::detail::basic_timed_mutex underlying_mutex;
}

class mutex:
    public ::boost::detail::underlying_mutex
{
    ...
}

Итак, в Windows boost :: mutex наследуется от временного мьютекса, но на xcode его просто класс, который использует pthreads (без поддержки try_for и т.д.).

Каков правильный способ использования boost mutex (с try_for) для Windows и MacOS? Любая помощь будет оценена по достоинству.

Теги:
visual-studio
xcode
boost
boost-thread

1 ответ

0
Лучший ответ

хорошо, решил (легко исправить). Я заменил boost :: mutex на boost :: timed_mutex, и теперь VS2008 и Xcode компилируются без ошибок в коде.

  • 0
    Да, если вам нужна концепция TimedLockable , вы должны использовать одну из ее моделей (например, timed_mutex ). Оказывается, что версия mutex Windows также реализует эту концепцию, но это всего лишь деталь реализации - на нее не следует полагаться.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню